Individual glacier analysis 1
Contents
Individual glacier analysis 1¶
This notebook will walk you through steps to read in and organize velocity data and clip it to the extent of a single glacier. The tools we will use include xarray, rioxarray and geopandas.
To clip its_live data to the extent of a single glacier we will use a vector dataset of glacier outlines, the Randolph Glacier Inventory. These aren’t cloud-hosted currently so you will need to download the data to your local machine.
Learning goals come back and finish these, feel like this notebook has alot, is pretty disorganized.. using xarray to read zarr data from s3 bucket
rio.clip()to clip raster by vectorviewing CRS, reprojecting and writing CRS data for various objects
dataset.where()
dataset.sel() using multiple conditions
groupby
First, lets install the python libraries that were listed on the Software page:
import geopandas as gpd
import os
import numpy as np
import xarray as xr
import rioxarray as rxr
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
from shapely.geometry import Polygon
from shapely.geometry import Point
import cartopy.crs as ccrs
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import cartopy
import cartopy.feature as cfeature
import json
import urllib.request
from skimage.morphology import skeletonize
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
%config InlineBackend.figure_format='retina'
Reading in ITS_LIVE data¶
We will use some of the functions we defiend in the data access notebook to read in data here.
import itslivetools
First, let’s read in the catalog again:
with urllib.request.urlopen('https://its-live-data.s3.amazonaws.com/datacubes/catalog_v02.json') as url_catalog:
itslive_catalog = json.loads(url_catalog.read().decode())
itslive_catalog.keys()
dict_keys(['type', 'features'])
Take a look at a single catalog entry:
Use the function below to find the url that corresponds to the zarr datacube for a specific point:
The read_in_s3() function will read in a xarray dataset from a url to a zarr datacube when we’re ready:
I started with chunk_size='auto' but ran into issues. more about choosing good chunk sizes here.
url = itslivetools.find_granule_by_point(itslive_catalog, [84.56, 28.54])
url
['http://its-live-data.s3.amazonaws.com/datacubes/v02/N20E080/ITS_LIVE_vel_EPSG32645_G0120_X250000_Y3150000.zarr']
dc = itslivetools.read_in_s3(url[0])
dc
<xarray.Dataset>
Dimensions: (mid_date: 20549, y: 833, x: 833)
Coordinates:
* mid_date (mid_date) datetime64[ns] 2020-02-07T17:10:52....
* x (x) float64 2.001e+05 2.002e+05 ... 2.999e+05
* y (y) float64 3.2e+06 3.2e+06 ... 3.1e+06 3.1e+06
Data variables: (12/54)
acquisition_date_img1 (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
acquisition_date_img2 (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
autoRIFT_software_version (mid_date) <U5 dask.array<chunksize=(20549,), meta=np.ndarray>
chip_size_height (mid_date, y, x) float32 dask.array<chunksize=(20549, 40, 40), meta=np.ndarray>
chip_size_width (mid_date, y, x) float32 dask.array<chunksize=(20549, 40, 40), meta=np.ndarray>
date_center (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
... ...
vy_error_mask (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_error_modeled (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_error_slow (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift_mask (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift_slow (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
Attributes: (12/18)
GDAL_AREA_OR_POINT: Area
author: ITS_LIVE, a NASA MEaSUREs project (its-live.j...
autoRIFT_parameter_file: http://its-live-data.s3.amazonaws.com/autorif...
datacube_software_version: 1.0
date_created: 09-Jun-2022 04:14:40
date_updated: 09-Jun-2022 04:14:40
... ...
s3: s3://its-live-data/datacubes/v02/N20E080/ITS_...
skipped_granules: s3://its-live-data/datacubes/v02/N20E080/ITS_...
time_standard_img1: UTC
time_standard_img2: UTC
title: ITS_LIVE datacube of image_pair velocities
url: https://its-live-data.s3.amazonaws.com/datacu...We are reading this in as a dask array. Let’s take a look at the chunk sizes:
NOTE: chunksizes shows the largest chunk size. chunks shows the sizes of all chunks along all dims, better if you have irregular chunks
dc.chunksizes
Frozen({'mid_date': (20549,), 'y': (40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 33), 'x': (40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 33)})
dc.chunks
Frozen({'mid_date': (20549,), 'y': (40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 33), 'x': (40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 33)})
Setting the dask chunksize to auto at the xr.open_dataset() step will use chunk sizes that most closely resemble the structure of the underlying data. To avoid imposing a chunk size that isn’t a good fit for the data, avoid re-chunking until we have selected a subset of our area of interest from the larger dataset
Check CRS of xr object:
dc.mapping
<xarray.DataArray 'mapping' ()>
array('', dtype='<U1')
Attributes:
CoordinateAxisTypes: GeoX GeoY
CoordinateTransformType: Projection
GeoTransform: 200032.5 120.0 0 3199927.5 0 -120.0
grid_mapping_name: universal_transverse_mercator
inverse_flattening: 298.257223563
semi_major_axis: 6378137.0
spatial_epsg: 32645
spatial_proj4: +proj=utm +zone=45 +datum=WGS84 +units=m +no_defs
spatial_ref: PROJCS["WGS 84 / UTM zone 45N",GEOGCS["WGS 84",...
utm_zone_number: 45.0Let’s take a look at the time dimension (mid_date here). To start with we’ll just print the first 10 values:
for element in range(10):
print(dc.mid_date[element].data)
2020-02-07T17:10:52.528083968
2021-11-11T05:10:40.529083904
2015-03-18T00:19:03.524224768
2019-10-10T17:13:32.528083968
2016-07-15T05:06:36.529083904
2021-08-10T17:10:34.529083904
2021-04-15T00:19:35.894403072
2018-06-27T17:09:39.528083968
2019-12-22T05:10:48.528083968
2020-07-29T05:10:51.528083968
Weird, it doesn’t look like the time dimension is in chronological order, let’s fix that:
dc_timesorted = dc.sortby(dc['mid_date'])
dc_timesorted
/Users/emarshall/miniconda3/envs/itslivetools_env/lib/python3.10/site-packages/xarray/core/indexing.py:1228: PerformanceWarning: Slicing is producing a large chunk. To accept the large
chunk and silence this warning, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': False}):
... array[indexer]
To avoid creating the large chunks, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': True}):
... array[indexer]
return self.array[key]
/Users/emarshall/miniconda3/envs/itslivetools_env/lib/python3.10/site-packages/xarray/core/indexing.py:1228: PerformanceWarning: Slicing is producing a large chunk. To accept the large
chunk and silence this warning, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': False}):
... array[indexer]
To avoid creating the large chunks, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': True}):
... array[indexer]
return self.array[key]
/Users/emarshall/miniconda3/envs/itslivetools_env/lib/python3.10/site-packages/xarray/core/indexing.py:1228: PerformanceWarning: Slicing is producing a large chunk. To accept the large
chunk and silence this warning, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': False}):
... array[indexer]
To avoid creating the large chunks, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': True}):
... array[indexer]
return self.array[key]
/Users/emarshall/miniconda3/envs/itslivetools_env/lib/python3.10/site-packages/xarray/core/indexing.py:1228: PerformanceWarning: Slicing is producing a large chunk. To accept the large
chunk and silence this warning, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': False}):
... array[indexer]
To avoid creating the large chunks, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': True}):
... array[indexer]
return self.array[key]
/Users/emarshall/miniconda3/envs/itslivetools_env/lib/python3.10/site-packages/xarray/core/indexing.py:1228: PerformanceWarning: Slicing is producing a large chunk. To accept the large
chunk and silence this warning, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': False}):
... array[indexer]
To avoid creating the large chunks, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': True}):
... array[indexer]
return self.array[key]
/Users/emarshall/miniconda3/envs/itslivetools_env/lib/python3.10/site-packages/xarray/core/indexing.py:1228: PerformanceWarning: Slicing is producing a large chunk. To accept the large
chunk and silence this warning, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': False}):
... array[indexer]
To avoid creating the large chunks, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': True}):
... array[indexer]
return self.array[key]
/Users/emarshall/miniconda3/envs/itslivetools_env/lib/python3.10/site-packages/xarray/core/indexing.py:1228: PerformanceWarning: Slicing is producing a large chunk. To accept the large
chunk and silence this warning, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': False}):
... array[indexer]
To avoid creating the large chunks, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': True}):
... array[indexer]
return self.array[key]
/Users/emarshall/miniconda3/envs/itslivetools_env/lib/python3.10/site-packages/xarray/core/indexing.py:1228: PerformanceWarning: Slicing is producing a large chunk. To accept the large
chunk and silence this warning, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': False}):
... array[indexer]
To avoid creating the large chunks, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': True}):
... array[indexer]
return self.array[key]
/Users/emarshall/miniconda3/envs/itslivetools_env/lib/python3.10/site-packages/xarray/core/indexing.py:1228: PerformanceWarning: Slicing is producing a large chunk. To accept the large
chunk and silence this warning, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': False}):
... array[indexer]
To avoid creating the large chunks, set the option
>>> with dask.config.set(**{'array.slicing.split_large_chunks': True}):
... array[indexer]
return self.array[key]
<xarray.Dataset>
Dimensions: (mid_date: 20549, y: 833, x: 833)
Coordinates:
* mid_date (mid_date) datetime64[ns] 2013-04-09T16:49:00....
* x (x) float64 2.001e+05 2.002e+05 ... 2.999e+05
* y (y) float64 3.2e+06 3.2e+06 ... 3.1e+06 3.1e+06
Data variables: (12/54)
acquisition_date_img1 (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
acquisition_date_img2 (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
autoRIFT_software_version (mid_date) <U5 dask.array<chunksize=(20549,), meta=np.ndarray>
chip_size_height (mid_date, y, x) float32 dask.array<chunksize=(20549, 40, 40), meta=np.ndarray>
chip_size_width (mid_date, y, x) float32 dask.array<chunksize=(20549, 40, 40), meta=np.ndarray>
date_center (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
... ...
vy_error_mask (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_error_modeled (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_error_slow (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift_mask (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift_slow (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
Attributes: (12/18)
GDAL_AREA_OR_POINT: Area
author: ITS_LIVE, a NASA MEaSUREs project (its-live.j...
autoRIFT_parameter_file: http://its-live-data.s3.amazonaws.com/autorif...
datacube_software_version: 1.0
date_created: 09-Jun-2022 04:14:40
date_updated: 09-Jun-2022 04:14:40
... ...
s3: s3://its-live-data/datacubes/v02/N20E080/ITS_...
skipped_granules: s3://its-live-data/datacubes/v02/N20E080/ITS_...
time_standard_img1: UTC
time_standard_img2: UTC
title: ITS_LIVE datacube of image_pair velocities
url: https://its-live-data.s3.amazonaws.com/datacu...When we read in the zarr datacube as a xr.Dataset we set the chunk sizes to auto. When we try to sort along the mid_date dimension this seems to become a problem and we get the warning above.
At first it makes sens to follow the instructions in the warning message to avoid creating large chunks, but this creates some issues. If you want, turn the cell below to code and run it, you can see that this re-chunks the time dimension which isn’t something that we want
import dask
with dask.config.set(**{'array.slicing.split_large_chunks': True}):
dc_timesorted_false = dc.sortby(dc['mid_date'])
dc_timesorted_false
dc_timesorted
<xarray.Dataset>
Dimensions: (mid_date: 20549, y: 833, x: 833)
Coordinates:
* mid_date (mid_date) datetime64[ns] 2013-04-09T16:49:00....
* x (x) float64 2.001e+05 2.002e+05 ... 2.999e+05
* y (y) float64 3.2e+06 3.2e+06 ... 3.1e+06 3.1e+06
Data variables: (12/54)
acquisition_date_img1 (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
acquisition_date_img2 (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
autoRIFT_software_version (mid_date) <U5 dask.array<chunksize=(20549,), meta=np.ndarray>
chip_size_height (mid_date, y, x) float32 dask.array<chunksize=(20549, 40, 40), meta=np.ndarray>
chip_size_width (mid_date, y, x) float32 dask.array<chunksize=(20549, 40, 40), meta=np.ndarray>
date_center (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
... ...
vy_error_mask (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_error_modeled (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_error_slow (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift_mask (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift_slow (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
Attributes: (12/18)
GDAL_AREA_OR_POINT: Area
author: ITS_LIVE, a NASA MEaSUREs project (its-live.j...
autoRIFT_parameter_file: http://its-live-data.s3.amazonaws.com/autorif...
datacube_software_version: 1.0
date_created: 09-Jun-2022 04:14:40
date_updated: 09-Jun-2022 04:14:40
... ...
s3: s3://its-live-data/datacubes/v02/N20E080/ITS_...
skipped_granules: s3://its-live-data/datacubes/v02/N20E080/ITS_...
time_standard_img1: UTC
time_standard_img2: UTC
title: ITS_LIVE datacube of image_pair velocities
url: https://its-live-data.s3.amazonaws.com/datacu...for element in range(10):
print(dc_timesorted.mid_date[element].data)
2013-04-09T16:49:00.528084992
2013-04-23T04:55:55.528083968
2013-04-25T16:49:09.528084992
2013-05-01T04:56:02.028083968
2013-05-03T16:49:08.028084992
2013-05-09T04:56:00.528083968
2013-05-09T04:56:03.528083968
2013-05-10T04:49:51.028084992
2013-05-17T04:56:02.028083968
2013-05-18T04:49:49.528084992
Read in vector data¶
We are going to read in RGI region 15 (SouthAsiaEast). RGI data is downloaded in lat/lon coordinates. We will project it to match the CRS of the ITS_LIVE dataset and then select an individual glacier to begin our analysis.
se_asia = gpd.read_file('/Users/emarshall/Desktop/siparcs/data/nsidc0770_15.rgi60.SouthAsiaEast/15_rgi60_SouthAsiaEast.shp')
se_asia.head(3)
| RGIId | GLIMSId | BgnDate | EndDate | CenLon | CenLat | O1Region | O2Region | Area | Zmin | ... | Aspect | Lmax | Status | Connect | Form | TermType | Surging | Linkages | Name | geometry | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | RGI60-15.00001 | G102044E29941N | 19990920 | -9999999 | 102.044042 | 29.941000 | 15 | 3 | 0.438 | 4996 | ... | 251 | 850 | 0 | 0 | 0 | 0 | 9 | 9 | None | POLYGON ((102.03759 29.93828, 102.03759 29.938... |
| 1 | RGI60-15.00002 | G102042E29987N | 19990920 | -9999999 | 102.042346 | 29.987019 | 15 | 3 | 0.644 | 4947 | ... | 244 | 1021 | 0 | 0 | 0 | 0 | 9 | 9 | None | POLYGON ((102.04195 29.99030, 102.04197 29.990... |
| 2 | RGI60-15.00003 | G102041E29997N | 19990920 | -9999999 | 102.041130 | 29.997311 | 15 | 3 | 0.225 | 5019 | ... | 274 | 812 | 0 | 0 | 0 | 0 | 9 | 9 | None | POLYGON ((102.03710 29.99774, 102.03719 29.998... |
3 rows × 23 columns
#project rgi data to match itslive
se_asia_prj = se_asia.to_crs('EPSG:32645') #we know the epsg from looking at the 'spatial epsg' attr of the mapping var of the dc object
se_asia_prj.head(3)
| RGIId | GLIMSId | BgnDate | EndDate | CenLon | CenLat | O1Region | O2Region | Area | Zmin | ... | Aspect | Lmax | Status | Connect | Form | TermType | Surging | Linkages | Name | geometry | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | RGI60-15.00001 | G102044E29941N | 19990920 | -9999999 | 102.044042 | 29.941000 | 15 | 3 | 0.438 | 4996 | ... | 251 | 850 | 0 | 0 | 0 | 0 | 9 | 9 | None | POLYGON ((1959630.570 3408951.748, 1959630.394... |
| 1 | RGI60-15.00002 | G102042E29987N | 19990920 | -9999999 | 102.042346 | 29.987019 | 15 | 3 | 0.644 | 4947 | ... | 244 | 1021 | 0 | 0 | 0 | 0 | 9 | 9 | None | POLYGON ((1959271.126 3414873.173, 1959273.308... |
| 2 | RGI60-15.00003 | G102041E29997N | 19990920 | -9999999 | 102.041130 | 29.997311 | 15 | 3 | 0.225 | 5019 | ... | 274 | 812 | 0 | 0 | 0 | 0 | 9 | 9 | None | POLYGON ((1958682.136 3415647.929, 1958684.710... |
3 rows × 23 columns
Crop RGI to ITS_LIVE extent¶
use get_bbox_single() from access nb but no plotting (above)
#first, get vector bbox of itslive
bbox_dc = itslivetools.get_bbox_single(dc)
bbox_dc['geometry']
0 POLYGON ((83.95080 27.99167, 84.96524 28.01044...
Name: geometry, dtype: geometry
#project from latlon to local utm
bbox_dc = bbox_dc.to_crs('EPSG:32645')
bbox_dc
| geometry | |
|---|---|
| 0 | POLYGON ((200092.500 3100027.500, 299932.500 3... |
#subset rgi to bounds
se_asia_subset = gpd.clip(se_asia_prj, bbox_dc)
se_asia_subset
se_asia_subset.explore()
sample_glacier_vec = se_asia_subset.loc[se_asia_subset['RGIId'] == 'RGI60-15.04714']
sample_glacier_vec
| RGIId | GLIMSId | BgnDate | EndDate | CenLon | CenLat | O1Region | O2Region | Area | Zmin | ... | Aspect | Lmax | Status | Connect | Form | TermType | Surging | Linkages | Name | geometry | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 4713 | RGI60-15.04714 | G084393E28743N | 20010929 | -9999999 | 84.392609 | 28.743019 | 15 | 1 | 13.593 | 4481 | ... | 317 | 12292 | 0 | 0 | 0 | 0 | 9 | 9 | None | POLYGON ((242056.441 3181919.463, 242008.653 3... |
1 rows × 23 columns
Clip ITS_LIVE dataset to individual glacier extent¶
First, we need to use rio.write_crs() to assign a CRS to the itslive object. If we don’t do that first the rio.clip() command will produce an error
Note: it looks like you can only run write_crs() once, because it switches mapping from being a data_var to a coord so if you run it again it will produce a key error looking for a var that doesnt’ exist
dc_timesorted = dc_timesorted.rio.write_crs(f"epsg:{dc_timesorted.mapping.attrs['spatial_epsg']}", inplace=True)
%%time
sample_glacier_raster = dc_timesorted.rio.clip(sample_glacier_vec.geometry, sample_glacier_vec.crs)
CPU times: user 262 ms, sys: 6.66 ms, total: 269 ms
Wall time: 268 ms
Take a look at the clipped object:
sample_glacier_raster
<xarray.Dataset>
Dimensions: (mid_date: 20549, y: 54, x: 100)
Coordinates:
mapping int64 0
* mid_date (mid_date) datetime64[ns] 2013-04-09T16:49:00....
* y (y) float64 3.188e+06 3.188e+06 ... 3.182e+06
* x (x) float64 2.36e+05 2.361e+05 ... 2.479e+05
Data variables: (12/53)
acquisition_date_img1 (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
acquisition_date_img2 (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
autoRIFT_software_version (mid_date) <U5 dask.array<chunksize=(20549,), meta=np.ndarray>
chip_size_height (mid_date, y, x) float32 dask.array<chunksize=(20549, 20, 21), meta=np.ndarray>
chip_size_width (mid_date, y, x) float32 dask.array<chunksize=(20549, 20, 21), meta=np.ndarray>
date_center (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
... ...
vy_error_mask (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_error_modeled (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_error_slow (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift_mask (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift_slow (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
Attributes: (12/18)
GDAL_AREA_OR_POINT: Area
author: ITS_LIVE, a NASA MEaSUREs project (its-live.j...
autoRIFT_parameter_file: http://its-live-data.s3.amazonaws.com/autorif...
datacube_software_version: 1.0
date_created: 09-Jun-2022 04:14:40
date_updated: 09-Jun-2022 04:14:40
... ...
s3: s3://its-live-data/datacubes/v02/N20E080/ITS_...
skipped_granules: s3://its-live-data/datacubes/v02/N20E080/ITS_...
time_standard_img1: UTC
time_standard_img2: UTC
title: ITS_LIVE datacube of image_pair velocities
url: https://its-live-data.s3.amazonaws.com/datacu...Let’s take a look at the clipped raster alongside the vector outline. To start with and for the sake of easy visualizing we will take the mean of the magnitude of velocity variable along the mid_date dimension:
fig, ax = plt.subplots(figsize = (15,9))
sample_glacier_vec.plot(ax=ax, facecolor='none', edgecolor='red');
sample_glacier_raster.v.mean(dim=['mid_date']).plot(ax=ax);
Now let’s take a look at the x and y components of velocity, again averaging over time:
fig, axs = plt.subplots(ncols =2, figsize=(17,7))
sample_glacier_raster.vx.mean(dim='mid_date').plot(ax=axs[0]);
sample_glacier_raster.vy.mean(dim='mid_date').plot(ax=axs[1]);
sample_glacier_raster.v_error.mean(dim=['mid_date']).plot();
Exploring ITS_LIVE data¶
ITS_LIVE data cubes come with many (53!) variables that carry information about the estimated surface velocities and the satellite images that were used to generate the surface velocity estimates. We won’t examine all of this information here but let’s look at a litte bit.
To start with, let’s look at the satellite imagery used to generate the velocity data.
We see that we have two data_vars that indicate which sensor that each image in the image pair at a certain time step comes from:
sample_glacier_raster.satellite_img1.data.compute()
array(['8.', '8.', '8.', ..., '2A', '2B', '2B'], dtype='<U2')
sample_glacier_raster.satellite_img2
<xarray.DataArray 'satellite_img2' (mid_date: 20549)>
dask.array<copy, shape=(20549,), dtype=<U2, chunksize=(20549,), chunktype=numpy.ndarray>
Coordinates:
mapping int64 0
* mid_date (mid_date) datetime64[ns] 2013-04-09T16:49:00.528084992 ... 202...
Attributes:
description: id of the satellite that acquired image 2
standard_name: image2_satelliteThe satellite_img1 and satellite_img2 variables are 1-dimensional numpy arrays corresponding to the length of the mid_date dimension of the data cube. You can see that each element of the array is a string corresponding to a different satellite:
1A = Sentinel 1A, 1B = Sentinel 1B, 2A = Sentinel 2A
2B = Sentinel 2B, 8. = Landsat8 and 9. = Landsat9
Let’s re-arrange these string arrays into a format that is easier to work with.
First, we’ll make a set of all the different string values in the satellite image variables:
Examining velocity data from each satellite in ITS_LIVE dataset¶
What if we only wanted to look at the velocity estimates from landat8?
l8_data = sample_glacier_raster.where(sample_glacier_raster['satellite_img1'] == '8.', drop=True)
l8_data
<xarray.Dataset>
Dimensions: (mid_date: 7257, y: 54, x: 100)
Coordinates:
mapping int64 0
* mid_date (mid_date) datetime64[ns] 2013-04-09T16:49:00....
* y (y) float64 3.188e+06 3.188e+06 ... 3.182e+06
* x (x) float64 2.36e+05 2.361e+05 ... 2.479e+05
Data variables: (12/53)
acquisition_date_img1 (mid_date) datetime64[ns] dask.array<chunksize=(7257,), meta=np.ndarray>
acquisition_date_img2 (mid_date) datetime64[ns] dask.array<chunksize=(7257,), meta=np.ndarray>
autoRIFT_software_version (mid_date) object dask.array<chunksize=(7257,), meta=np.ndarray>
chip_size_height (mid_date, y, x) float32 dask.array<chunksize=(7257, 20, 21), meta=np.ndarray>
chip_size_width (mid_date, y, x) float32 dask.array<chunksize=(7257, 20, 21), meta=np.ndarray>
date_center (mid_date) datetime64[ns] dask.array<chunksize=(7257,), meta=np.ndarray>
... ...
vy_error_mask (mid_date) float64 dask.array<chunksize=(7257,), meta=np.ndarray>
vy_error_modeled (mid_date) float64 dask.array<chunksize=(7257,), meta=np.ndarray>
vy_error_slow (mid_date) float64 dask.array<chunksize=(7257,), meta=np.ndarray>
vy_stable_shift (mid_date) float64 dask.array<chunksize=(7257,), meta=np.ndarray>
vy_stable_shift_mask (mid_date) float64 dask.array<chunksize=(7257,), meta=np.ndarray>
vy_stable_shift_slow (mid_date) float64 dask.array<chunksize=(7257,), meta=np.ndarray>
Attributes: (12/18)
GDAL_AREA_OR_POINT: Area
author: ITS_LIVE, a NASA MEaSUREs project (its-live.j...
autoRIFT_parameter_file: http://its-live-data.s3.amazonaws.com/autorif...
datacube_software_version: 1.0
date_created: 09-Jun-2022 04:14:40
date_updated: 09-Jun-2022 04:14:40
... ...
s3: s3://its-live-data/datacubes/v02/N20E080/ITS_...
skipped_granules: s3://its-live-data/datacubes/v02/N20E080/ITS_...
time_standard_img1: UTC
time_standard_img2: UTC
title: ITS_LIVE datacube of image_pair velocities
url: https://its-live-data.s3.amazonaws.com/datacu...dataset.where() at first seems appropriate to use for kind of operation but there’s actually an easier way. Because we are selecting along a single dimension (mid_date), we can use xarray’s .sel() method instead. This is more efficient and integrates with dask arrays more smoothly.
l8_condition = sample_glacier_raster.satellite_img1.isin('8.')
l8_subset = sample_glacier_raster.sel(mid_date=l8_condition)
l8_subset
<xarray.Dataset>
Dimensions: (mid_date: 7257, y: 54, x: 100)
Coordinates:
mapping int64 0
* mid_date (mid_date) datetime64[ns] 2013-04-09T16:49:00....
* y (y) float64 3.188e+06 3.188e+06 ... 3.182e+06
* x (x) float64 2.36e+05 2.361e+05 ... 2.479e+05
Data variables: (12/53)
acquisition_date_img1 (mid_date) datetime64[ns] dask.array<chunksize=(7257,), meta=np.ndarray>
acquisition_date_img2 (mid_date) datetime64[ns] dask.array<chunksize=(7257,), meta=np.ndarray>
autoRIFT_software_version (mid_date) <U5 dask.array<chunksize=(7257,), meta=np.ndarray>
chip_size_height (mid_date, y, x) float32 dask.array<chunksize=(7257, 20, 21), meta=np.ndarray>
chip_size_width (mid_date, y, x) float32 dask.array<chunksize=(7257, 20, 21), meta=np.ndarray>
date_center (mid_date) datetime64[ns] dask.array<chunksize=(7257,), meta=np.ndarray>
... ...
vy_error_mask (mid_date) float64 dask.array<chunksize=(7257,), meta=np.ndarray>
vy_error_modeled (mid_date) float64 dask.array<chunksize=(7257,), meta=np.ndarray>
vy_error_slow (mid_date) float64 dask.array<chunksize=(7257,), meta=np.ndarray>
vy_stable_shift (mid_date) float64 dask.array<chunksize=(7257,), meta=np.ndarray>
vy_stable_shift_mask (mid_date) float64 dask.array<chunksize=(7257,), meta=np.ndarray>
vy_stable_shift_slow (mid_date) float64 dask.array<chunksize=(7257,), meta=np.ndarray>
Attributes: (12/18)
GDAL_AREA_OR_POINT: Area
author: ITS_LIVE, a NASA MEaSUREs project (its-live.j...
autoRIFT_parameter_file: http://its-live-data.s3.amazonaws.com/autorif...
datacube_software_version: 1.0
date_created: 09-Jun-2022 04:14:40
date_updated: 09-Jun-2022 04:14:40
... ...
s3: s3://its-live-data/datacubes/v02/N20E080/ITS_...
skipped_granules: s3://its-live-data/datacubes/v02/N20E080/ITS_...
time_standard_img1: UTC
time_standard_img2: UTC
title: ITS_LIVE datacube of image_pair velocities
url: https://its-live-data.s3.amazonaws.com/datacu...We can see that we are looking at roughly a third of the original time steps. Let’s take a look at the average speeds of the Landsat8-derived velocities:
l8_subset.v.mean(dim='mid_date').plot();
What about Landsat9?
l9_condition = sample_glacier_raster.satellite_img1.isin('9.')
l9_subset = sample_glacier_raster.sel(mid_date=l9_condition)
l9_subset
<xarray.Dataset>
Dimensions: (mid_date: 46, y: 54, x: 100)
Coordinates:
mapping int64 0
* mid_date (mid_date) datetime64[ns] 2021-11-06T16:48:19....
* y (y) float64 3.188e+06 3.188e+06 ... 3.182e+06
* x (x) float64 2.36e+05 2.361e+05 ... 2.479e+05
Data variables: (12/53)
acquisition_date_img1 (mid_date) datetime64[ns] dask.array<chunksize=(46,), meta=np.ndarray>
acquisition_date_img2 (mid_date) datetime64[ns] dask.array<chunksize=(46,), meta=np.ndarray>
autoRIFT_software_version (mid_date) <U5 dask.array<chunksize=(46,), meta=np.ndarray>
chip_size_height (mid_date, y, x) float32 dask.array<chunksize=(46, 20, 21), meta=np.ndarray>
chip_size_width (mid_date, y, x) float32 dask.array<chunksize=(46, 20, 21), meta=np.ndarray>
date_center (mid_date) datetime64[ns] dask.array<chunksize=(46,), meta=np.ndarray>
... ...
vy_error_mask (mid_date) float64 dask.array<chunksize=(46,), meta=np.ndarray>
vy_error_modeled (mid_date) float64 dask.array<chunksize=(46,), meta=np.ndarray>
vy_error_slow (mid_date) float64 dask.array<chunksize=(46,), meta=np.ndarray>
vy_stable_shift (mid_date) float64 dask.array<chunksize=(46,), meta=np.ndarray>
vy_stable_shift_mask (mid_date) float64 dask.array<chunksize=(46,), meta=np.ndarray>
vy_stable_shift_slow (mid_date) float64 dask.array<chunksize=(46,), meta=np.ndarray>
Attributes: (12/18)
GDAL_AREA_OR_POINT: Area
author: ITS_LIVE, a NASA MEaSUREs project (its-live.j...
autoRIFT_parameter_file: http://its-live-data.s3.amazonaws.com/autorif...
datacube_software_version: 1.0
date_created: 09-Jun-2022 04:14:40
date_updated: 09-Jun-2022 04:14:40
... ...
s3: s3://its-live-data/datacubes/v02/N20E080/ITS_...
skipped_granules: s3://its-live-data/datacubes/v02/N20E080/ITS_...
time_standard_img1: UTC
time_standard_img2: UTC
title: ITS_LIVE datacube of image_pair velocities
url: https://its-live-data.s3.amazonaws.com/datacu...Only 45 time steps have data from Landsat9, this makes sense because Landsat9 was just launched recently
l9_subset.v.mean(dim='mid_date').plot();
Let’s look at Sentinel 1 data. Note here we are selecting for 2 values instead of 1:
s1_condition = sample_glacier_raster.satellite_img1.isin(['1A','1B'])
s1_subset = sample_glacier_raster.sel(mid_date = s1_condition)
s1_subset
<xarray.Dataset>
Dimensions: (mid_date: 475, y: 54, x: 100)
Coordinates:
mapping int64 0
* mid_date (mid_date) datetime64[ns] 2014-10-13T00:19:06....
* y (y) float64 3.188e+06 3.188e+06 ... 3.182e+06
* x (x) float64 2.36e+05 2.361e+05 ... 2.479e+05
Data variables: (12/53)
acquisition_date_img1 (mid_date) datetime64[ns] dask.array<chunksize=(475,), meta=np.ndarray>
acquisition_date_img2 (mid_date) datetime64[ns] dask.array<chunksize=(475,), meta=np.ndarray>
autoRIFT_software_version (mid_date) <U5 dask.array<chunksize=(475,), meta=np.ndarray>
chip_size_height (mid_date, y, x) float32 dask.array<chunksize=(475, 20, 21), meta=np.ndarray>
chip_size_width (mid_date, y, x) float32 dask.array<chunksize=(475, 20, 21), meta=np.ndarray>
date_center (mid_date) datetime64[ns] dask.array<chunksize=(475,), meta=np.ndarray>
... ...
vy_error_mask (mid_date) float64 dask.array<chunksize=(475,), meta=np.ndarray>
vy_error_modeled (mid_date) float64 dask.array<chunksize=(475,), meta=np.ndarray>
vy_error_slow (mid_date) float64 dask.array<chunksize=(475,), meta=np.ndarray>
vy_stable_shift (mid_date) float64 dask.array<chunksize=(475,), meta=np.ndarray>
vy_stable_shift_mask (mid_date) float64 dask.array<chunksize=(475,), meta=np.ndarray>
vy_stable_shift_slow (mid_date) float64 dask.array<chunksize=(475,), meta=np.ndarray>
Attributes: (12/18)
GDAL_AREA_OR_POINT: Area
author: ITS_LIVE, a NASA MEaSUREs project (its-live.j...
autoRIFT_parameter_file: http://its-live-data.s3.amazonaws.com/autorif...
datacube_software_version: 1.0
date_created: 09-Jun-2022 04:14:40
date_updated: 09-Jun-2022 04:14:40
... ...
s3: s3://its-live-data/datacubes/v02/N20E080/ITS_...
skipped_granules: s3://its-live-data/datacubes/v02/N20E080/ITS_...
time_standard_img1: UTC
time_standard_img2: UTC
title: ITS_LIVE datacube of image_pair velocities
url: https://its-live-data.s3.amazonaws.com/datacu...s1_subset.v.mean(dim='mid_date').plot();
s2_condition = sample_glacier_raster.satellite_img1.isin(['2A','2B'])
s2_subset = sample_glacier_raster.sel(mid_date=s2_condition)
s2_subset
<xarray.Dataset>
Dimensions: (mid_date: 12771, y: 54, x: 100)
Coordinates:
mapping int64 0
* mid_date (mid_date) datetime64[ns] 2016-02-26T05:07:11....
* y (y) float64 3.188e+06 3.188e+06 ... 3.182e+06
* x (x) float64 2.36e+05 2.361e+05 ... 2.479e+05
Data variables: (12/53)
acquisition_date_img1 (mid_date) datetime64[ns] dask.array<chunksize=(12771,), meta=np.ndarray>
acquisition_date_img2 (mid_date) datetime64[ns] dask.array<chunksize=(12771,), meta=np.ndarray>
autoRIFT_software_version (mid_date) <U5 dask.array<chunksize=(12771,), meta=np.ndarray>
chip_size_height (mid_date, y, x) float32 dask.array<chunksize=(12771, 20, 21), meta=np.ndarray>
chip_size_width (mid_date, y, x) float32 dask.array<chunksize=(12771, 20, 21), meta=np.ndarray>
date_center (mid_date) datetime64[ns] dask.array<chunksize=(12771,), meta=np.ndarray>
... ...
vy_error_mask (mid_date) float64 dask.array<chunksize=(12771,), meta=np.ndarray>
vy_error_modeled (mid_date) float64 dask.array<chunksize=(12771,), meta=np.ndarray>
vy_error_slow (mid_date) float64 dask.array<chunksize=(12771,), meta=np.ndarray>
vy_stable_shift (mid_date) float64 dask.array<chunksize=(12771,), meta=np.ndarray>
vy_stable_shift_mask (mid_date) float64 dask.array<chunksize=(12771,), meta=np.ndarray>
vy_stable_shift_slow (mid_date) float64 dask.array<chunksize=(12771,), meta=np.ndarray>
Attributes: (12/18)
GDAL_AREA_OR_POINT: Area
author: ITS_LIVE, a NASA MEaSUREs project (its-live.j...
autoRIFT_parameter_file: http://its-live-data.s3.amazonaws.com/autorif...
datacube_software_version: 1.0
date_created: 09-Jun-2022 04:14:40
date_updated: 09-Jun-2022 04:14:40
... ...
s3: s3://its-live-data/datacubes/v02/N20E080/ITS_...
skipped_granules: s3://its-live-data/datacubes/v02/N20E080/ITS_...
time_standard_img1: UTC
time_standard_img2: UTC
title: ITS_LIVE datacube of image_pair velocities
url: https://its-live-data.s3.amazonaws.com/datacu...s2_subset.v.mean(dim='mid_date').plot();
Checking coverage along a dimension¶
It would be nice to be able to scan/visualize and observe coverage of a variable along a dimension
Attempting that below…
First need to make a mask that will tell us all the possible ‘valid’ pixels. ie pixels over ice v. rock. Some versions of ITS_LIVE have a variable that indicates surface type that would be handy for this but the datacubes don’t. Start by taking the mean of velocity pixels along the time dimension, take all pixels in this array that aren’t NaN as ice pixels.
valid_pixels = sample_glacier_raster.v.count(dim=['x','y']).compute()
valid_pix_max = valid_pixels.max().data
cov = valid_pixels/valid_pix_max
sample_glacier_raster['cov'] = cov
sample_glacier_raster
<xarray.Dataset>
Dimensions: (mid_date: 20549, y: 54, x: 100)
Coordinates:
mapping int64 0
* mid_date (mid_date) datetime64[ns] 2013-04-09T16:49:00....
* y (y) float64 3.188e+06 3.188e+06 ... 3.182e+06
* x (x) float64 2.36e+05 2.361e+05 ... 2.479e+05
Data variables: (12/54)
acquisition_date_img1 (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
acquisition_date_img2 (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
autoRIFT_software_version (mid_date) <U5 dask.array<chunksize=(20549,), meta=np.ndarray>
chip_size_height (mid_date, y, x) float32 dask.array<chunksize=(20549, 20, 21), meta=np.ndarray>
chip_size_width (mid_date, y, x) float32 dask.array<chunksize=(20549, 20, 21), meta=np.ndarray>
date_center (mid_date) datetime64[ns] dask.array<chunksize=(20549,), meta=np.ndarray>
... ...
vy_error_modeled (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_error_slow (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift_mask (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
vy_stable_shift_slow (mid_date) float64 dask.array<chunksize=(20549,), meta=np.ndarray>
cov (mid_date) float64 0.0 0.8655 0.0 ... 0.0 0.9587
Attributes: (12/18)
GDAL_AREA_OR_POINT: Area
author: ITS_LIVE, a NASA MEaSUREs project (its-live.j...
autoRIFT_parameter_file: http://its-live-data.s3.amazonaws.com/autorif...
datacube_software_version: 1.0
date_created: 09-Jun-2022 04:14:40
date_updated: 09-Jun-2022 04:14:40
... ...
s3: s3://its-live-data/datacubes/v02/N20E080/ITS_...
skipped_granules: s3://its-live-data/datacubes/v02/N20E080/ITS_...
time_standard_img1: UTC
time_standard_img2: UTC
title: ITS_LIVE datacube of image_pair velocities
url: https://its-live-data.s3.amazonaws.com/datacu...#how many time steps are duplicates?, there are 16872 unique vals in mid_dates
np.unique(sample_glacier_raster['mid_date'].data).shape
(16872,)
fig, ax = plt.subplots(figsize=(30,3))
sample_glacier_raster.cov.plot(ax=ax, linestyle='None',marker = 'x')
[<matplotlib.lines.Line2D at 0x1b8398700>]
sample_glacier_raster.groupby('satellite_img1').mean()
<xarray.Dataset>
Dimensions: (y: 54, x: 100, satellite_img1: 6)
Coordinates:
mapping int64 0
* y (y) float64 3.188e+06 3.188e+06 ... 3.182e+06
* x (x) float64 2.36e+05 2.361e+05 ... 2.477e+05 2.479e+05
* satellite_img1 (satellite_img1) object '1A' '1B' '2A' '2B' '8.' '9.'
Data variables: (12/43)
chip_size_height (satellite_img1, y, x) float32 dask.array<chunksize=(1, 20, 21), meta=np.ndarray>
chip_size_width (satellite_img1, y, x) float32 dask.array<chunksize=(1, 20, 21), meta=np.ndarray>
date_dt (satellite_img1) timedelta64[ns] dask.array<chunksize=(1,), meta=np.ndarray>
interp_mask (satellite_img1, y, x) float32 dask.array<chunksize=(1, 20, 21), meta=np.ndarray>
roi_valid_percentage (satellite_img1) float64 dask.array<chunksize=(1,), meta=np.ndarray>
stable_count_mask (satellite_img1) float64 dask.array<chunksize=(1,), meta=np.ndarray>
... ...
vy_error_modeled (satellite_img1) float64 dask.array<chunksize=(1,), meta=np.ndarray>
vy_error_slow (satellite_img1) float64 dask.array<chunksize=(1,), meta=np.ndarray>
vy_stable_shift (satellite_img1) float64 dask.array<chunksize=(1,), meta=np.ndarray>
vy_stable_shift_mask (satellite_img1) float64 dask.array<chunksize=(1,), meta=np.ndarray>
vy_stable_shift_slow (satellite_img1) float64 dask.array<chunksize=(1,), meta=np.ndarray>
cov (satellite_img1) float64 0.6748 0.3644 ... 0.2566sample_glacier_raster.cov.groupby(sample_glacier_raster.satellite_img1)
DataArrayGroupBy, grouped over 'satellite_img1'
6 groups with labels '1A', '1B', '2A', '2B', '8.', '9.'.
sample_glacier_raster.groupby('mid_date')
DatasetGroupBy, grouped over 'mid_date'
16872 groups with labels 2013-04-09T16:49:00.5280849....
import flox.xarray
sample_glacier_raster.cov
<xarray.DataArray 'cov' (mid_date: 20549)>
array([0. , 0.8654661 , 0. , ..., 0.78813559, 0. ,
0.95868644])
Coordinates:
mapping int64 0
* mid_date (mid_date) datetime64[ns] 2013-04-09T16:49:00.528084992 ... 202...coverage = flox.xarray.xarray_reduce(
sample_glacier_raster.cov,
sample_glacier_raster.satellite_img1.compute(),
sample_glacier_raster.mid_date,
func="mean",
fill_value=0,
)
/Users/emarshall/miniconda3/envs/itslivetools_env/lib/python3.10/site-packages/flox/aggregate_flox.py:105: RuntimeWarning: invalid value encountered in true_divide
out /= nanlen(group_idx, array, size=size, axis=axis, fill_value=0)
plt.pcolormesh(coverage.mid_date, coverage.satellite_img1, coverage, cmap='viridis')
plt.colorbar()
<matplotlib.colorbar.Colorbar at 0x1b878cb80>
Seasonal mean velocities for each year with groupby¶
year_gb = sample_glacier_raster.groupby(sample_glacier_raster.mid_date.dt.year)
year_gb
DatasetGroupBy, grouped over 'year'
10 groups with labels 2013, 2014, 2015, ..., 2021, 2022.
year_gb.groups
#yr_season_gb = year_gb.groupby(year_gb.mid_date.dt.season).map(middate_mean)
{2013: [0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284],
2014: [285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632,
633,
634,
635,
636,
637,
638,
639,
640,
641,
642,
643,
644,
645,
646,
647,
648,
649,
650,
651,
652,
653,
654,
655,
656,
657,
658,
659,
660,
661,
662,
663,
664,
665,
666,
667,
668,
669,
670,
671,
672,
673,
674,
675,
676,
677,
678,
679,
680,
681,
682,
683,
684,
685,
686,
687,
688,
689,
690,
691,
692,
693,
694,
695,
696,
697,
698,
699,
700,
701,
702,
703,
704,
705,
706,
707,
708,
709,
710,
711,
712,
713,
714,
715,
716,
717,
718,
719,
720,
721,
722,
723,
724,
725,
726,
727,
728,
729,
730,
731,
732,
733,
734,
735,
736,
737,
738,
739,
740,
741,
742,
743,
744,
745,
746,
747,
748,
749,
750,
751,
752,
753,
754,
755,
756,
757,
758,
759,
760,
761,
762,
763,
764,
765,
766,
767,
768,
769,
770,
771,
772,
773,
774,
775,
776,
777,
778,
779,
780,
781,
782,
783,
784,
785,
786,
787,
788,
789,
790,
791,
792,
793,
794,
795,
796,
797,
798,
799,
800,
801,
802,
803,
804,
805,
806,
807,
808,
809,
810,
811,
812,
813,
814,
815,
816,
817,
818,
819,
820,
821,
822,
823,
824,
825,
826,
827,
828,
829,
830,
831,
832,
833,
834,
835,
836,
837,
838,
839,
840,
841,
842,
843,
844,
845,
846,
847,
848,
849,
850,
851,
852,
853,
854,
855,
856,
857,
858,
859,
860,
861,
862,
863,
864,
865,
866,
867,
868,
869,
870,
871,
872,
873,
874,
875,
876,
877,
878,
879,
880,
881,
882,
883,
884,
885,
886,
887,
888,
889,
890,
891,
892,
893,
894,
895,
896,
897,
898,
899,
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116,
1117,
1118,
1119,
1120,
1121,
1122,
1123,
1124,
1125,
1126,
1127,
1128,
1129,
1130,
1131,
1132,
1133,
1134,
1135,
1136,
1137,
1138,
1139,
1140,
1141,
1142,
1143,
1144,
1145,
1146,
1147,
1148,
1149,
1150,
1151,
1152,
1153,
1154,
1155,
1156,
1157,
1158,
1159,
1160,
1161,
1162,
1163,
1164,
1165,
1166,
1167,
1168,
1169,
1170,
1171,
1172,
1173,
1174,
1175,
1176,
1177],
2015: [1178,
1179,
1180,
1181,
1182,
1183,
1184,
1185,
1186,
1187,
1188,
1189,
1190,
1191,
1192,
1193,
1194,
1195,
1196,
1197,
1198,
1199,
1200,
1201,
1202,
1203,
1204,
1205,
1206,
1207,
1208,
1209,
1210,
1211,
1212,
1213,
1214,
1215,
1216,
1217,
1218,
1219,
1220,
1221,
1222,
1223,
1224,
1225,
1226,
1227,
1228,
1229,
1230,
1231,
1232,
1233,
1234,
1235,
1236,
1237,
1238,
1239,
1240,
1241,
1242,
1243,
1244,
1245,
1246,
1247,
1248,
1249,
1250,
1251,
1252,
1253,
1254,
1255,
1256,
1257,
1258,
1259,
1260,
1261,
1262,
1263,
1264,
1265,
1266,
1267,
1268,
1269,
1270,
1271,
1272,
1273,
1274,
1275,
1276,
1277,
1278,
1279,
1280,
1281,
1282,
1283,
1284,
1285,
1286,
1287,
1288,
1289,
1290,
1291,
1292,
1293,
1294,
1295,
1296,
1297,
1298,
1299,
1300,
1301,
1302,
1303,
1304,
1305,
1306,
1307,
1308,
1309,
1310,
1311,
1312,
1313,
1314,
1315,
1316,
1317,
1318,
1319,
1320,
1321,
1322,
1323,
1324,
1325,
1326,
1327,
1328,
1329,
1330,
1331,
1332,
1333,
1334,
1335,
1336,
1337,
1338,
1339,
1340,
1341,
1342,
1343,
1344,
1345,
1346,
1347,
1348,
1349,
1350,
1351,
1352,
1353,
1354,
1355,
1356,
1357,
1358,
1359,
1360,
1361,
1362,
1363,
1364,
1365,
1366,
1367,
1368,
1369,
1370,
1371,
1372,
1373,
1374,
1375,
1376,
1377,
1378,
1379,
1380,
1381,
1382,
1383,
1384,
1385,
1386,
1387,
1388,
1389,
1390,
1391,
1392,
1393,
1394,
1395,
1396,
1397,
1398,
1399,
1400,
1401,
1402,
1403,
1404,
1405,
1406,
1407,
1408,
1409,
1410,
1411,
1412,
1413,
1414,
1415,
1416,
1417,
1418,
1419,
1420,
1421,
1422,
1423,
1424,
1425,
1426,
1427,
1428,
1429,
1430,
1431,
1432,
1433,
1434,
1435,
1436,
1437,
1438,
1439,
1440,
1441,
1442,
1443,
1444,
1445,
1446,
1447,
1448,
1449,
1450,
1451,
1452,
1453,
1454,
1455,
1456,
1457,
1458,
1459,
1460,
1461,
1462,
1463,
1464,
1465,
1466,
1467,
1468,
1469,
1470,
1471,
1472,
1473,
1474,
1475,
1476,
1477,
1478,
1479,
1480,
1481,
1482,
1483,
1484,
1485,
1486,
1487,
1488,
1489,
1490,
1491,
1492,
1493,
1494,
1495,
1496,
1497,
1498,
1499,
1500,
1501,
1502,
1503,
1504,
1505,
1506,
1507,
1508,
1509,
1510,
1511,
1512,
1513,
1514,
1515,
1516,
1517,
1518,
1519,
1520,
1521,
1522,
1523,
1524,
1525,
1526,
1527,
1528,
1529,
1530,
1531,
1532,
1533,
1534,
1535,
1536,
1537,
1538,
1539,
1540,
1541,
1542,
1543,
1544,
1545,
1546,
1547,
1548,
1549,
1550,
1551,
1552,
1553,
1554,
1555,
1556,
1557,
1558,
1559,
1560,
1561,
1562,
1563,
1564,
1565,
1566,
1567,
1568,
1569,
1570,
1571,
1572,
1573,
1574,
1575,
1576,
1577,
1578,
1579,
1580,
1581,
1582,
1583,
1584,
1585,
1586,
1587,
1588,
1589,
1590,
1591,
1592,
1593,
1594,
1595,
1596,
1597,
1598,
1599,
1600,
1601,
1602,
1603,
1604,
1605,
1606,
1607,
1608,
1609,
1610,
1611,
1612,
1613,
1614,
1615,
1616,
1617,
1618,
1619,
1620,
1621,
1622,
1623,
1624,
1625,
1626,
1627,
1628,
1629,
1630,
1631,
1632,
1633,
1634,
1635,
1636,
1637,
1638,
1639,
1640,
1641,
1642,
1643,
1644,
1645,
1646,
1647,
1648,
1649,
1650,
1651,
1652,
1653,
1654,
1655,
1656,
1657,
1658,
1659,
1660,
1661,
1662,
1663,
1664,
1665,
1666,
1667,
1668,
1669,
1670,
1671,
1672,
1673,
1674,
1675,
1676,
1677,
1678,
1679,
1680,
1681,
1682,
1683,
1684,
1685,
1686,
1687,
1688,
1689,
1690,
1691,
1692,
1693,
1694,
1695,
1696,
1697,
1698,
1699,
1700,
1701,
1702,
1703,
1704,
1705,
1706,
1707,
1708,
1709,
1710,
1711,
1712,
1713,
1714,
1715,
1716,
1717,
1718,
1719,
1720,
1721,
1722,
1723,
1724,
1725,
1726,
1727,
1728,
1729,
1730,
1731,
1732,
1733,
1734,
1735,
1736,
1737,
1738,
1739,
1740,
1741,
1742,
1743,
1744,
1745,
1746,
1747,
1748,
1749,
1750,
1751,
1752,
1753,
1754,
1755,
1756,
1757,
1758,
1759,
1760,
1761,
1762,
1763,
1764,
1765,
1766,
1767,
1768,
1769,
1770,
1771,
1772,
1773,
1774,
1775,
1776,
1777,
1778,
1779,
1780,
1781,
1782,
1783,
1784,
1785,
1786,
1787,
1788,
1789,
1790,
1791,
1792,
1793,
1794,
1795,
1796,
1797,
1798,
1799,
1800,
1801,
1802,
1803,
1804,
1805,
1806,
1807,
1808,
1809,
1810,
1811,
1812,
1813,
1814,
1815,
1816,
1817,
1818,
1819,
1820,
1821,
1822,
1823,
1824,
1825,
1826,
1827,
1828,
1829,
1830,
1831,
1832,
1833,
1834,
1835,
1836,
1837,
1838,
1839,
1840,
1841,
1842,
1843,
1844,
1845,
1846,
1847,
1848,
1849,
1850,
1851,
1852,
1853,
1854,
1855,
1856,
1857,
1858,
1859,
1860,
1861,
1862,
1863,
1864,
1865,
1866,
1867,
1868,
1869,
1870,
1871,
1872,
1873,
1874,
1875,
1876,
1877,
1878,
1879,
1880,
1881,
1882,
1883,
1884,
1885,
1886,
1887,
1888,
1889,
1890,
1891,
1892,
1893,
1894,
1895,
1896,
1897,
1898,
1899,
1900,
1901,
1902,
1903,
1904,
1905,
1906,
1907,
1908,
1909,
1910,
1911,
1912,
1913,
1914,
1915,
1916,
1917,
1918,
1919,
1920,
1921,
1922,
1923,
1924,
1925,
1926,
1927,
1928,
1929,
1930,
1931,
1932,
1933,
1934,
1935,
1936,
1937,
1938,
1939,
1940,
1941,
1942,
1943,
1944,
1945,
1946,
1947,
1948,
1949,
1950,
1951,
1952,
1953,
1954,
1955,
1956,
1957,
1958,
1959,
1960,
1961,
1962,
1963,
1964,
1965,
1966,
1967,
1968,
1969,
1970,
1971,
1972,
1973,
1974,
1975,
1976,
1977,
1978,
1979,
1980,
1981,
1982,
1983,
1984,
1985,
1986,
1987,
1988,
1989,
1990,
1991,
1992,
1993,
1994,
1995,
1996,
1997,
1998,
1999,
2000,
2001,
2002,
2003,
2004,
2005,
2006,
2007,
2008,
2009,
2010,
2011,
2012,
2013,
2014,
2015,
2016,
2017,
2018,
2019,
2020,
2021,
2022,
2023,
2024,
2025,
2026,
2027,
2028,
2029,
2030,
2031,
2032,
2033,
2034,
2035,
2036,
2037,
2038,
2039,
2040,
2041,
2042,
2043,
2044,
2045,
2046,
2047,
2048,
2049,
2050,
2051,
2052,
2053,
2054,
2055,
2056,
2057,
2058,
2059,
2060,
2061,
2062,
2063],
2016: [2064,
2065,
2066,
2067,
2068,
2069,
2070,
2071,
2072,
2073,
2074,
2075,
2076,
2077,
2078,
2079,
2080,
2081,
2082,
2083,
2084,
2085,
2086,
2087,
2088,
2089,
2090,
2091,
2092,
2093,
2094,
2095,
2096,
2097,
2098,
2099,
2100,
2101,
2102,
2103,
2104,
2105,
2106,
2107,
2108,
2109,
2110,
2111,
2112,
2113,
2114,
2115,
2116,
2117,
2118,
2119,
2120,
2121,
2122,
2123,
2124,
2125,
2126,
2127,
2128,
2129,
2130,
2131,
2132,
2133,
2134,
2135,
2136,
2137,
2138,
2139,
2140,
2141,
2142,
2143,
2144,
2145,
2146,
2147,
2148,
2149,
2150,
2151,
2152,
2153,
2154,
2155,
2156,
2157,
2158,
2159,
2160,
2161,
2162,
2163,
2164,
2165,
2166,
2167,
2168,
2169,
2170,
2171,
2172,
2173,
2174,
2175,
2176,
2177,
2178,
2179,
2180,
2181,
2182,
2183,
2184,
2185,
2186,
2187,
2188,
2189,
2190,
2191,
2192,
2193,
2194,
2195,
2196,
2197,
2198,
2199,
2200,
2201,
2202,
2203,
2204,
2205,
2206,
2207,
2208,
2209,
2210,
2211,
2212,
2213,
2214,
2215,
2216,
2217,
2218,
2219,
2220,
2221,
2222,
2223,
2224,
2225,
2226,
2227,
2228,
2229,
2230,
2231,
2232,
2233,
2234,
2235,
2236,
2237,
2238,
2239,
2240,
2241,
2242,
2243,
2244,
2245,
2246,
2247,
2248,
2249,
2250,
2251,
2252,
2253,
2254,
2255,
2256,
2257,
2258,
2259,
2260,
2261,
2262,
2263,
2264,
2265,
2266,
2267,
2268,
2269,
2270,
2271,
2272,
2273,
2274,
2275,
2276,
2277,
2278,
2279,
2280,
2281,
2282,
2283,
2284,
2285,
2286,
2287,
2288,
2289,
2290,
2291,
2292,
2293,
2294,
2295,
2296,
2297,
2298,
2299,
2300,
2301,
2302,
2303,
2304,
2305,
2306,
2307,
2308,
2309,
2310,
2311,
2312,
2313,
2314,
2315,
2316,
2317,
2318,
2319,
2320,
2321,
2322,
2323,
2324,
2325,
2326,
2327,
2328,
2329,
2330,
2331,
2332,
2333,
2334,
2335,
2336,
2337,
2338,
2339,
2340,
2341,
2342,
2343,
2344,
2345,
2346,
2347,
2348,
2349,
2350,
2351,
2352,
2353,
2354,
2355,
2356,
2357,
2358,
2359,
2360,
2361,
2362,
2363,
2364,
2365,
2366,
2367,
2368,
2369,
2370,
2371,
2372,
2373,
2374,
2375,
2376,
2377,
2378,
2379,
2380,
2381,
2382,
2383,
2384,
2385,
2386,
2387,
2388,
2389,
2390,
2391,
2392,
2393,
2394,
2395,
2396,
2397,
2398,
2399,
2400,
2401,
2402,
2403,
2404,
2405,
2406,
2407,
2408,
2409,
2410,
2411,
2412,
2413,
2414,
2415,
2416,
2417,
2418,
2419,
2420,
2421,
2422,
2423,
2424,
2425,
2426,
2427,
2428,
2429,
2430,
2431,
2432,
2433,
2434,
2435,
2436,
2437,
2438,
2439,
2440,
2441,
2442,
2443,
2444,
2445,
2446,
2447,
2448,
2449,
2450,
2451,
2452,
2453,
2454,
2455,
2456,
2457,
2458,
2459,
2460,
2461,
2462,
2463,
2464,
2465,
2466,
2467,
2468,
2469,
2470,
2471,
2472,
2473,
2474,
2475,
2476,
2477,
2478,
2479,
2480,
2481,
2482,
2483,
2484,
2485,
2486,
2487,
2488,
2489,
2490,
2491,
2492,
2493,
2494,
2495,
2496,
2497,
2498,
2499,
2500,
2501,
2502,
2503,
2504,
2505,
2506,
2507,
2508,
2509,
2510,
2511,
2512,
2513,
2514,
2515,
2516,
2517,
2518,
2519,
2520,
2521,
2522,
2523,
2524,
2525,
2526,
2527,
2528,
2529,
2530,
2531,
2532,
2533,
2534,
2535,
2536,
2537,
2538,
2539,
2540,
2541,
2542,
2543,
2544,
2545,
2546,
2547,
2548,
2549,
2550,
2551,
2552,
2553,
2554,
2555,
2556,
2557,
2558,
2559,
2560,
2561,
2562,
2563,
2564,
2565,
2566,
2567,
2568,
2569,
2570,
2571,
2572,
2573,
2574,
2575,
2576,
2577,
2578,
2579,
2580,
2581,
2582,
2583,
2584,
2585,
2586,
2587,
2588,
2589,
2590,
2591,
2592,
2593,
2594,
2595,
2596,
2597,
2598,
2599,
2600,
2601,
2602,
2603,
2604,
2605,
2606,
2607,
2608,
2609,
2610,
2611,
2612,
2613,
2614,
2615,
2616,
2617,
2618,
2619,
2620,
2621,
2622,
2623,
2624,
2625,
2626,
2627,
2628,
2629,
2630,
2631,
2632,
2633,
2634,
2635,
2636,
2637,
2638,
2639,
2640,
2641,
2642,
2643,
2644,
2645,
2646,
2647,
2648,
2649,
2650,
2651,
2652,
2653,
2654,
2655,
2656,
2657,
2658,
2659,
2660,
2661,
2662,
2663,
2664,
2665,
2666,
2667,
2668,
2669,
2670,
2671,
2672,
2673,
2674,
2675,
2676,
2677,
2678,
2679,
2680,
2681,
2682,
2683,
2684,
2685,
2686,
2687,
2688,
2689,
2690,
2691,
2692,
2693,
2694,
2695,
2696,
2697,
2698,
2699,
2700,
2701,
2702,
2703,
2704,
2705,
2706,
2707,
2708,
2709,
2710,
2711,
2712,
2713,
2714,
2715,
2716,
2717,
2718,
2719,
2720,
2721,
2722,
2723,
2724,
2725,
2726,
2727,
2728,
2729,
2730,
2731,
2732,
2733,
2734,
2735,
2736,
2737,
2738,
2739,
2740,
2741,
2742,
2743,
2744,
2745,
2746,
2747,
2748,
2749,
2750,
2751,
2752,
2753,
2754,
2755,
2756,
2757,
2758,
2759,
2760,
2761,
2762,
2763,
2764,
2765,
2766,
2767,
2768,
2769,
2770,
2771,
2772,
2773,
2774,
2775,
2776,
2777,
2778,
2779,
2780,
2781,
2782,
2783,
2784,
2785,
2786,
2787,
2788,
2789,
2790,
2791,
2792,
2793,
2794,
2795,
2796,
2797,
2798,
2799,
2800,
2801,
2802,
2803,
2804,
2805,
2806,
2807,
2808,
2809,
2810,
2811,
2812,
2813,
2814,
2815,
2816,
2817,
2818,
2819,
2820,
2821,
2822,
2823,
2824,
2825,
2826,
2827,
2828,
2829,
2830,
2831,
2832,
2833,
2834,
2835,
2836,
2837,
2838,
2839,
2840,
2841,
2842,
2843,
2844,
2845,
2846,
2847,
2848,
2849,
2850,
2851,
2852,
2853,
2854,
2855,
2856,
2857,
2858,
2859,
2860,
2861,
2862,
2863,
2864,
2865,
2866,
2867,
2868,
2869,
2870,
2871,
2872,
2873,
2874,
2875,
2876,
2877,
2878,
2879,
2880,
2881,
2882,
2883,
2884,
2885,
2886,
2887,
2888,
2889,
2890,
2891,
2892,
2893,
2894,
2895,
2896,
2897,
2898,
2899,
2900,
2901,
2902,
2903,
2904,
2905,
2906,
2907,
2908,
2909,
2910,
2911,
2912,
2913,
2914,
2915,
2916,
2917,
2918,
2919,
2920,
2921,
2922,
2923,
2924,
2925,
2926,
2927,
2928,
2929,
2930,
2931,
2932,
2933,
2934,
2935,
2936,
2937,
2938,
2939,
2940,
2941,
2942,
2943,
2944,
2945,
2946,
2947,
2948,
2949,
2950,
2951,
2952,
2953,
2954,
2955,
2956,
2957,
2958,
2959,
2960,
2961,
2962,
2963,
2964,
2965,
2966,
2967,
2968,
2969,
2970,
2971,
2972,
2973,
2974,
2975,
2976,
2977,
2978,
2979,
2980,
2981,
2982,
2983,
2984,
2985,
2986,
2987,
2988,
2989,
2990,
2991,
2992,
2993,
2994,
2995,
2996,
2997,
2998,
2999,
3000,
3001,
3002,
3003,
3004,
3005,
3006,
3007,
3008,
3009,
3010,
3011,
3012,
3013,
3014,
3015,
3016,
3017,
3018,
3019,
3020,
3021,
3022,
3023,
3024,
3025,
3026,
3027,
3028,
3029,
3030,
3031,
3032,
3033,
3034,
3035,
3036,
3037,
3038,
3039,
3040,
3041,
3042,
3043,
3044,
3045,
3046,
3047,
3048,
3049,
3050,
3051,
3052,
3053,
3054,
3055,
3056,
3057,
3058,
3059,
3060,
3061,
3062,
3063,
...],
2017: [3102,
3103,
3104,
3105,
3106,
3107,
3108,
3109,
3110,
3111,
3112,
3113,
3114,
3115,
3116,
3117,
3118,
3119,
3120,
3121,
3122,
3123,
3124,
3125,
3126,
3127,
3128,
3129,
3130,
3131,
3132,
3133,
3134,
3135,
3136,
3137,
3138,
3139,
3140,
3141,
3142,
3143,
3144,
3145,
3146,
3147,
3148,
3149,
3150,
3151,
3152,
3153,
3154,
3155,
3156,
3157,
3158,
3159,
3160,
3161,
3162,
3163,
3164,
3165,
3166,
3167,
3168,
3169,
3170,
3171,
3172,
3173,
3174,
3175,
3176,
3177,
3178,
3179,
3180,
3181,
3182,
3183,
3184,
3185,
3186,
3187,
3188,
3189,
3190,
3191,
3192,
3193,
3194,
3195,
3196,
3197,
3198,
3199,
3200,
3201,
3202,
3203,
3204,
3205,
3206,
3207,
3208,
3209,
3210,
3211,
3212,
3213,
3214,
3215,
3216,
3217,
3218,
3219,
3220,
3221,
3222,
3223,
3224,
3225,
3226,
3227,
3228,
3229,
3230,
3231,
3232,
3233,
3234,
3235,
3236,
3237,
3238,
3239,
3240,
3241,
3242,
3243,
3244,
3245,
3246,
3247,
3248,
3249,
3250,
3251,
3252,
3253,
3254,
3255,
3256,
3257,
3258,
3259,
3260,
3261,
3262,
3263,
3264,
3265,
3266,
3267,
3268,
3269,
3270,
3271,
3272,
3273,
3274,
3275,
3276,
3277,
3278,
3279,
3280,
3281,
3282,
3283,
3284,
3285,
3286,
3287,
3288,
3289,
3290,
3291,
3292,
3293,
3294,
3295,
3296,
3297,
3298,
3299,
3300,
3301,
3302,
3303,
3304,
3305,
3306,
3307,
3308,
3309,
3310,
3311,
3312,
3313,
3314,
3315,
3316,
3317,
3318,
3319,
3320,
3321,
3322,
3323,
3324,
3325,
3326,
3327,
3328,
3329,
3330,
3331,
3332,
3333,
3334,
3335,
3336,
3337,
3338,
3339,
3340,
3341,
3342,
3343,
3344,
3345,
3346,
3347,
3348,
3349,
3350,
3351,
3352,
3353,
3354,
3355,
3356,
3357,
3358,
3359,
3360,
3361,
3362,
3363,
3364,
3365,
3366,
3367,
3368,
3369,
3370,
3371,
3372,
3373,
3374,
3375,
3376,
3377,
3378,
3379,
3380,
3381,
3382,
3383,
3384,
3385,
3386,
3387,
3388,
3389,
3390,
3391,
3392,
3393,
3394,
3395,
3396,
3397,
3398,
3399,
3400,
3401,
3402,
3403,
3404,
3405,
3406,
3407,
3408,
3409,
3410,
3411,
3412,
3413,
3414,
3415,
3416,
3417,
3418,
3419,
3420,
3421,
3422,
3423,
3424,
3425,
3426,
3427,
3428,
3429,
3430,
3431,
3432,
3433,
3434,
3435,
3436,
3437,
3438,
3439,
3440,
3441,
3442,
3443,
3444,
3445,
3446,
3447,
3448,
3449,
3450,
3451,
3452,
3453,
3454,
3455,
3456,
3457,
3458,
3459,
3460,
3461,
3462,
3463,
3464,
3465,
3466,
3467,
3468,
3469,
3470,
3471,
3472,
3473,
3474,
3475,
3476,
3477,
3478,
3479,
3480,
3481,
3482,
3483,
3484,
3485,
3486,
3487,
3488,
3489,
3490,
3491,
3492,
3493,
3494,
3495,
3496,
3497,
3498,
3499,
3500,
3501,
3502,
3503,
3504,
3505,
3506,
3507,
3508,
3509,
3510,
3511,
3512,
3513,
3514,
3515,
3516,
3517,
3518,
3519,
3520,
3521,
3522,
3523,
3524,
3525,
3526,
3527,
3528,
3529,
3530,
3531,
3532,
3533,
3534,
3535,
3536,
3537,
3538,
3539,
3540,
3541,
3542,
3543,
3544,
3545,
3546,
3547,
3548,
3549,
3550,
3551,
3552,
3553,
3554,
3555,
3556,
3557,
3558,
3559,
3560,
3561,
3562,
3563,
3564,
3565,
3566,
3567,
3568,
3569,
3570,
3571,
3572,
3573,
3574,
3575,
3576,
3577,
3578,
3579,
3580,
3581,
3582,
3583,
3584,
3585,
3586,
3587,
3588,
3589,
3590,
3591,
3592,
3593,
3594,
3595,
3596,
3597,
3598,
3599,
3600,
3601,
3602,
3603,
3604,
3605,
3606,
3607,
3608,
3609,
3610,
3611,
3612,
3613,
3614,
3615,
3616,
3617,
3618,
3619,
3620,
3621,
3622,
3623,
3624,
3625,
3626,
3627,
3628,
3629,
3630,
3631,
3632,
3633,
3634,
3635,
3636,
3637,
3638,
3639,
3640,
3641,
3642,
3643,
3644,
3645,
3646,
3647,
3648,
3649,
3650,
3651,
3652,
3653,
3654,
3655,
3656,
3657,
3658,
3659,
3660,
3661,
3662,
3663,
3664,
3665,
3666,
3667,
3668,
3669,
3670,
3671,
3672,
3673,
3674,
3675,
3676,
3677,
3678,
3679,
3680,
3681,
3682,
3683,
3684,
3685,
3686,
3687,
3688,
3689,
3690,
3691,
3692,
3693,
3694,
3695,
3696,
3697,
3698,
3699,
3700,
3701,
3702,
3703,
3704,
3705,
3706,
3707,
3708,
3709,
3710,
3711,
3712,
3713,
3714,
3715,
3716,
3717,
3718,
3719,
3720,
3721,
3722,
3723,
3724,
3725,
3726,
3727,
3728,
3729,
3730,
3731,
3732,
3733,
3734,
3735,
3736,
3737,
3738,
3739,
3740,
3741,
3742,
3743,
3744,
3745,
3746,
3747,
3748,
3749,
3750,
3751,
3752,
3753,
3754,
3755,
3756,
3757,
3758,
3759,
3760,
3761,
3762,
3763,
3764,
3765,
3766,
3767,
3768,
3769,
3770,
3771,
3772,
3773,
3774,
3775,
3776,
3777,
3778,
3779,
3780,
3781,
3782,
3783,
3784,
3785,
3786,
3787,
3788,
3789,
3790,
3791,
3792,
3793,
3794,
3795,
3796,
3797,
3798,
3799,
3800,
3801,
3802,
3803,
3804,
3805,
3806,
3807,
3808,
3809,
3810,
3811,
3812,
3813,
3814,
3815,
3816,
3817,
3818,
3819,
3820,
3821,
3822,
3823,
3824,
3825,
3826,
3827,
3828,
3829,
3830,
3831,
3832,
3833,
3834,
3835,
3836,
3837,
3838,
3839,
3840,
3841,
3842,
3843,
3844,
3845,
3846,
3847,
3848,
3849,
3850,
3851,
3852,
3853,
3854,
3855,
3856,
3857,
3858,
3859,
3860,
3861,
3862,
3863,
3864,
3865,
3866,
3867,
3868,
3869,
3870,
3871,
3872,
3873,
3874,
3875,
3876,
3877,
3878,
3879,
3880,
3881,
3882,
3883,
3884,
3885,
3886,
3887,
3888,
3889,
3890,
3891,
3892,
3893,
3894,
3895,
3896,
3897,
3898,
3899,
3900,
3901,
3902,
3903,
3904,
3905,
3906,
3907,
3908,
3909,
3910,
3911,
3912,
3913,
3914,
3915,
3916,
3917,
3918,
3919,
3920,
3921,
3922,
3923,
3924,
3925,
3926,
3927,
3928,
3929,
3930,
3931,
3932,
3933,
3934,
3935,
3936,
3937,
3938,
3939,
3940,
3941,
3942,
3943,
3944,
3945,
3946,
3947,
3948,
3949,
3950,
3951,
3952,
3953,
3954,
3955,
3956,
3957,
3958,
3959,
3960,
3961,
3962,
3963,
3964,
3965,
3966,
3967,
3968,
3969,
3970,
3971,
3972,
3973,
3974,
3975,
3976,
3977,
3978,
3979,
3980,
3981,
3982,
3983,
3984,
3985,
3986,
3987,
3988,
3989,
3990,
3991,
3992,
3993,
3994,
3995,
3996,
3997,
3998,
3999,
4000,
4001,
4002,
4003,
4004,
4005,
4006,
4007,
4008,
4009,
4010,
4011,
4012,
4013,
4014,
4015,
4016,
4017,
4018,
4019,
4020,
4021,
4022,
4023,
4024,
4025,
4026,
4027,
4028,
4029,
4030,
4031,
4032,
4033,
4034,
4035,
4036,
4037,
4038,
4039,
4040,
4041,
4042,
4043,
4044,
4045,
4046,
4047,
4048,
4049,
4050,
4051,
4052,
4053,
4054,
4055,
4056,
4057,
4058,
4059,
4060,
4061,
4062,
4063,
4064,
4065,
4066,
4067,
4068,
4069,
4070,
4071,
4072,
4073,
4074,
4075,
4076,
4077,
4078,
4079,
4080,
4081,
4082,
4083,
4084,
4085,
4086,
4087,
4088,
4089,
4090,
4091,
4092,
4093,
4094,
4095,
4096,
4097,
4098,
4099,
4100,
4101,
...],
2018: [4759,
4760,
4761,
4762,
4763,
4764,
4765,
4766,
4767,
4768,
4769,
4770,
4771,
4772,
4773,
4774,
4775,
4776,
4777,
4778,
4779,
4780,
4781,
4782,
4783,
4784,
4785,
4786,
4787,
4788,
4789,
4790,
4791,
4792,
4793,
4794,
4795,
4796,
4797,
4798,
4799,
4800,
4801,
4802,
4803,
4804,
4805,
4806,
4807,
4808,
4809,
4810,
4811,
4812,
4813,
4814,
4815,
4816,
4817,
4818,
4819,
4820,
4821,
4822,
4823,
4824,
4825,
4826,
4827,
4828,
4829,
4830,
4831,
4832,
4833,
4834,
4835,
4836,
4837,
4838,
4839,
4840,
4841,
4842,
4843,
4844,
4845,
4846,
4847,
4848,
4849,
4850,
4851,
4852,
4853,
4854,
4855,
4856,
4857,
4858,
4859,
4860,
4861,
4862,
4863,
4864,
4865,
4866,
4867,
4868,
4869,
4870,
4871,
4872,
4873,
4874,
4875,
4876,
4877,
4878,
4879,
4880,
4881,
4882,
4883,
4884,
4885,
4886,
4887,
4888,
4889,
4890,
4891,
4892,
4893,
4894,
4895,
4896,
4897,
4898,
4899,
4900,
4901,
4902,
4903,
4904,
4905,
4906,
4907,
4908,
4909,
4910,
4911,
4912,
4913,
4914,
4915,
4916,
4917,
4918,
4919,
4920,
4921,
4922,
4923,
4924,
4925,
4926,
4927,
4928,
4929,
4930,
4931,
4932,
4933,
4934,
4935,
4936,
4937,
4938,
4939,
4940,
4941,
4942,
4943,
4944,
4945,
4946,
4947,
4948,
4949,
4950,
4951,
4952,
4953,
4954,
4955,
4956,
4957,
4958,
4959,
4960,
4961,
4962,
4963,
4964,
4965,
4966,
4967,
4968,
4969,
4970,
4971,
4972,
4973,
4974,
4975,
4976,
4977,
4978,
4979,
4980,
4981,
4982,
4983,
4984,
4985,
4986,
4987,
4988,
4989,
4990,
4991,
4992,
4993,
4994,
4995,
4996,
4997,
4998,
4999,
5000,
5001,
5002,
5003,
5004,
5005,
5006,
5007,
5008,
5009,
5010,
5011,
5012,
5013,
5014,
5015,
5016,
5017,
5018,
5019,
5020,
5021,
5022,
5023,
5024,
5025,
5026,
5027,
5028,
5029,
5030,
5031,
5032,
5033,
5034,
5035,
5036,
5037,
5038,
5039,
5040,
5041,
5042,
5043,
5044,
5045,
5046,
5047,
5048,
5049,
5050,
5051,
5052,
5053,
5054,
5055,
5056,
5057,
5058,
5059,
5060,
5061,
5062,
5063,
5064,
5065,
5066,
5067,
5068,
5069,
5070,
5071,
5072,
5073,
5074,
5075,
5076,
5077,
5078,
5079,
5080,
5081,
5082,
5083,
5084,
5085,
5086,
5087,
5088,
5089,
5090,
5091,
5092,
5093,
5094,
5095,
5096,
5097,
5098,
5099,
5100,
5101,
5102,
5103,
5104,
5105,
5106,
5107,
5108,
5109,
5110,
5111,
5112,
5113,
5114,
5115,
5116,
5117,
5118,
5119,
5120,
5121,
5122,
5123,
5124,
5125,
5126,
5127,
5128,
5129,
5130,
5131,
5132,
5133,
5134,
5135,
5136,
5137,
5138,
5139,
5140,
5141,
5142,
5143,
5144,
5145,
5146,
5147,
5148,
5149,
5150,
5151,
5152,
5153,
5154,
5155,
5156,
5157,
5158,
5159,
5160,
5161,
5162,
5163,
5164,
5165,
5166,
5167,
5168,
5169,
5170,
5171,
5172,
5173,
5174,
5175,
5176,
5177,
5178,
5179,
5180,
5181,
5182,
5183,
5184,
5185,
5186,
5187,
5188,
5189,
5190,
5191,
5192,
5193,
5194,
5195,
5196,
5197,
5198,
5199,
5200,
5201,
5202,
5203,
5204,
5205,
5206,
5207,
5208,
5209,
5210,
5211,
5212,
5213,
5214,
5215,
5216,
5217,
5218,
5219,
5220,
5221,
5222,
5223,
5224,
5225,
5226,
5227,
5228,
5229,
5230,
5231,
5232,
5233,
5234,
5235,
5236,
5237,
5238,
5239,
5240,
5241,
5242,
5243,
5244,
5245,
5246,
5247,
5248,
5249,
5250,
5251,
5252,
5253,
5254,
5255,
5256,
5257,
5258,
5259,
5260,
5261,
5262,
5263,
5264,
5265,
5266,
5267,
5268,
5269,
5270,
5271,
5272,
5273,
5274,
5275,
5276,
5277,
5278,
5279,
5280,
5281,
5282,
5283,
5284,
5285,
5286,
5287,
5288,
5289,
5290,
5291,
5292,
5293,
5294,
5295,
5296,
5297,
5298,
5299,
5300,
5301,
5302,
5303,
5304,
5305,
5306,
5307,
5308,
5309,
5310,
5311,
5312,
5313,
5314,
5315,
5316,
5317,
5318,
5319,
5320,
5321,
5322,
5323,
5324,
5325,
5326,
5327,
5328,
5329,
5330,
5331,
5332,
5333,
5334,
5335,
5336,
5337,
5338,
5339,
5340,
5341,
5342,
5343,
5344,
5345,
5346,
5347,
5348,
5349,
5350,
5351,
5352,
5353,
5354,
5355,
5356,
5357,
5358,
5359,
5360,
5361,
5362,
5363,
5364,
5365,
5366,
5367,
5368,
5369,
5370,
5371,
5372,
5373,
5374,
5375,
5376,
5377,
5378,
5379,
5380,
5381,
5382,
5383,
5384,
5385,
5386,
5387,
5388,
5389,
5390,
5391,
5392,
5393,
5394,
5395,
5396,
5397,
5398,
5399,
5400,
5401,
5402,
5403,
5404,
5405,
5406,
5407,
5408,
5409,
5410,
5411,
5412,
5413,
5414,
5415,
5416,
5417,
5418,
5419,
5420,
5421,
5422,
5423,
5424,
5425,
5426,
5427,
5428,
5429,
5430,
5431,
5432,
5433,
5434,
5435,
5436,
5437,
5438,
5439,
5440,
5441,
5442,
5443,
5444,
5445,
5446,
5447,
5448,
5449,
5450,
5451,
5452,
5453,
5454,
5455,
5456,
5457,
5458,
5459,
5460,
5461,
5462,
5463,
5464,
5465,
5466,
5467,
5468,
5469,
5470,
5471,
5472,
5473,
5474,
5475,
5476,
5477,
5478,
5479,
5480,
5481,
5482,
5483,
5484,
5485,
5486,
5487,
5488,
5489,
5490,
5491,
5492,
5493,
5494,
5495,
5496,
5497,
5498,
5499,
5500,
5501,
5502,
5503,
5504,
5505,
5506,
5507,
5508,
5509,
5510,
5511,
5512,
5513,
5514,
5515,
5516,
5517,
5518,
5519,
5520,
5521,
5522,
5523,
5524,
5525,
5526,
5527,
5528,
5529,
5530,
5531,
5532,
5533,
5534,
5535,
5536,
5537,
5538,
5539,
5540,
5541,
5542,
5543,
5544,
5545,
5546,
5547,
5548,
5549,
5550,
5551,
5552,
5553,
5554,
5555,
5556,
5557,
5558,
5559,
5560,
5561,
5562,
5563,
5564,
5565,
5566,
5567,
5568,
5569,
5570,
5571,
5572,
5573,
5574,
5575,
5576,
5577,
5578,
5579,
5580,
5581,
5582,
5583,
5584,
5585,
5586,
5587,
5588,
5589,
5590,
5591,
5592,
5593,
5594,
5595,
5596,
5597,
5598,
5599,
5600,
5601,
5602,
5603,
5604,
5605,
5606,
5607,
5608,
5609,
5610,
5611,
5612,
5613,
5614,
5615,
5616,
5617,
5618,
5619,
5620,
5621,
5622,
5623,
5624,
5625,
5626,
5627,
5628,
5629,
5630,
5631,
5632,
5633,
5634,
5635,
5636,
5637,
5638,
5639,
5640,
5641,
5642,
5643,
5644,
5645,
5646,
5647,
5648,
5649,
5650,
5651,
5652,
5653,
5654,
5655,
5656,
5657,
5658,
5659,
5660,
5661,
5662,
5663,
5664,
5665,
5666,
5667,
5668,
5669,
5670,
5671,
5672,
5673,
5674,
5675,
5676,
5677,
5678,
5679,
5680,
5681,
5682,
5683,
5684,
5685,
5686,
5687,
5688,
5689,
5690,
5691,
5692,
5693,
5694,
5695,
5696,
5697,
5698,
5699,
5700,
5701,
5702,
5703,
5704,
5705,
5706,
5707,
5708,
5709,
5710,
5711,
5712,
5713,
5714,
5715,
5716,
5717,
5718,
5719,
5720,
5721,
5722,
5723,
5724,
5725,
5726,
5727,
5728,
5729,
5730,
5731,
5732,
5733,
5734,
5735,
5736,
5737,
5738,
5739,
5740,
5741,
5742,
5743,
5744,
5745,
5746,
5747,
5748,
5749,
5750,
5751,
5752,
5753,
5754,
5755,
5756,
5757,
5758,
...],
2019: [7612,
7613,
7614,
7615,
7616,
7617,
7618,
7619,
7620,
7621,
7622,
7623,
7624,
7625,
7626,
7627,
7628,
7629,
7630,
7631,
7632,
7633,
7634,
7635,
7636,
7637,
7638,
7639,
7640,
7641,
7642,
7643,
7644,
7645,
7646,
7647,
7648,
7649,
7650,
7651,
7652,
7653,
7654,
7655,
7656,
7657,
7658,
7659,
7660,
7661,
7662,
7663,
7664,
7665,
7666,
7667,
7668,
7669,
7670,
7671,
7672,
7673,
7674,
7675,
7676,
7677,
7678,
7679,
7680,
7681,
7682,
7683,
7684,
7685,
7686,
7687,
7688,
7689,
7690,
7691,
7692,
7693,
7694,
7695,
7696,
7697,
7698,
7699,
7700,
7701,
7702,
7703,
7704,
7705,
7706,
7707,
7708,
7709,
7710,
7711,
7712,
7713,
7714,
7715,
7716,
7717,
7718,
7719,
7720,
7721,
7722,
7723,
7724,
7725,
7726,
7727,
7728,
7729,
7730,
7731,
7732,
7733,
7734,
7735,
7736,
7737,
7738,
7739,
7740,
7741,
7742,
7743,
7744,
7745,
7746,
7747,
7748,
7749,
7750,
7751,
7752,
7753,
7754,
7755,
7756,
7757,
7758,
7759,
7760,
7761,
7762,
7763,
7764,
7765,
7766,
7767,
7768,
7769,
7770,
7771,
7772,
7773,
7774,
7775,
7776,
7777,
7778,
7779,
7780,
7781,
7782,
7783,
7784,
7785,
7786,
7787,
7788,
7789,
7790,
7791,
7792,
7793,
7794,
7795,
7796,
7797,
7798,
7799,
7800,
7801,
7802,
7803,
7804,
7805,
7806,
7807,
7808,
7809,
7810,
7811,
7812,
7813,
7814,
7815,
7816,
7817,
7818,
7819,
7820,
7821,
7822,
7823,
7824,
7825,
7826,
7827,
7828,
7829,
7830,
7831,
7832,
7833,
7834,
7835,
7836,
7837,
7838,
7839,
7840,
7841,
7842,
7843,
7844,
7845,
7846,
7847,
7848,
7849,
7850,
7851,
7852,
7853,
7854,
7855,
7856,
7857,
7858,
7859,
7860,
7861,
7862,
7863,
7864,
7865,
7866,
7867,
7868,
7869,
7870,
7871,
7872,
7873,
7874,
7875,
7876,
7877,
7878,
7879,
7880,
7881,
7882,
7883,
7884,
7885,
7886,
7887,
7888,
7889,
7890,
7891,
7892,
7893,
7894,
7895,
7896,
7897,
7898,
7899,
7900,
7901,
7902,
7903,
7904,
7905,
7906,
7907,
7908,
7909,
7910,
7911,
7912,
7913,
7914,
7915,
7916,
7917,
7918,
7919,
7920,
7921,
7922,
7923,
7924,
7925,
7926,
7927,
7928,
7929,
7930,
7931,
7932,
7933,
7934,
7935,
7936,
7937,
7938,
7939,
7940,
7941,
7942,
7943,
7944,
7945,
7946,
7947,
7948,
7949,
7950,
7951,
7952,
7953,
7954,
7955,
7956,
7957,
7958,
7959,
7960,
7961,
7962,
7963,
7964,
7965,
7966,
7967,
7968,
7969,
7970,
7971,
7972,
7973,
7974,
7975,
7976,
7977,
7978,
7979,
7980,
7981,
7982,
7983,
7984,
7985,
7986,
7987,
7988,
7989,
7990,
7991,
7992,
7993,
7994,
7995,
7996,
7997,
7998,
7999,
8000,
8001,
8002,
8003,
8004,
8005,
8006,
8007,
8008,
8009,
8010,
8011,
8012,
8013,
8014,
8015,
8016,
8017,
8018,
8019,
8020,
8021,
8022,
8023,
8024,
8025,
8026,
8027,
8028,
8029,
8030,
8031,
8032,
8033,
8034,
8035,
8036,
8037,
8038,
8039,
8040,
8041,
8042,
8043,
8044,
8045,
8046,
8047,
8048,
8049,
8050,
8051,
8052,
8053,
8054,
8055,
8056,
8057,
8058,
8059,
8060,
8061,
8062,
8063,
8064,
8065,
8066,
8067,
8068,
8069,
8070,
8071,
8072,
8073,
8074,
8075,
8076,
8077,
8078,
8079,
8080,
8081,
8082,
8083,
8084,
8085,
8086,
8087,
8088,
8089,
8090,
8091,
8092,
8093,
8094,
8095,
8096,
8097,
8098,
8099,
8100,
8101,
8102,
8103,
8104,
8105,
8106,
8107,
8108,
8109,
8110,
8111,
8112,
8113,
8114,
8115,
8116,
8117,
8118,
8119,
8120,
8121,
8122,
8123,
8124,
8125,
8126,
8127,
8128,
8129,
8130,
8131,
8132,
8133,
8134,
8135,
8136,
8137,
8138,
8139,
8140,
8141,
8142,
8143,
8144,
8145,
8146,
8147,
8148,
8149,
8150,
8151,
8152,
8153,
8154,
8155,
8156,
8157,
8158,
8159,
8160,
8161,
8162,
8163,
8164,
8165,
8166,
8167,
8168,
8169,
8170,
8171,
8172,
8173,
8174,
8175,
8176,
8177,
8178,
8179,
8180,
8181,
8182,
8183,
8184,
8185,
8186,
8187,
8188,
8189,
8190,
8191,
8192,
8193,
8194,
8195,
8196,
8197,
8198,
8199,
8200,
8201,
8202,
8203,
8204,
8205,
8206,
8207,
8208,
8209,
8210,
8211,
8212,
8213,
8214,
8215,
8216,
8217,
8218,
8219,
8220,
8221,
8222,
8223,
8224,
8225,
8226,
8227,
8228,
8229,
8230,
8231,
8232,
8233,
8234,
8235,
8236,
8237,
8238,
8239,
8240,
8241,
8242,
8243,
8244,
8245,
8246,
8247,
8248,
8249,
8250,
8251,
8252,
8253,
8254,
8255,
8256,
8257,
8258,
8259,
8260,
8261,
8262,
8263,
8264,
8265,
8266,
8267,
8268,
8269,
8270,
8271,
8272,
8273,
8274,
8275,
8276,
8277,
8278,
8279,
8280,
8281,
8282,
8283,
8284,
8285,
8286,
8287,
8288,
8289,
8290,
8291,
8292,
8293,
8294,
8295,
8296,
8297,
8298,
8299,
8300,
8301,
8302,
8303,
8304,
8305,
8306,
8307,
8308,
8309,
8310,
8311,
8312,
8313,
8314,
8315,
8316,
8317,
8318,
8319,
8320,
8321,
8322,
8323,
8324,
8325,
8326,
8327,
8328,
8329,
8330,
8331,
8332,
8333,
8334,
8335,
8336,
8337,
8338,
8339,
8340,
8341,
8342,
8343,
8344,
8345,
8346,
8347,
8348,
8349,
8350,
8351,
8352,
8353,
8354,
8355,
8356,
8357,
8358,
8359,
8360,
8361,
8362,
8363,
8364,
8365,
8366,
8367,
8368,
8369,
8370,
8371,
8372,
8373,
8374,
8375,
8376,
8377,
8378,
8379,
8380,
8381,
8382,
8383,
8384,
8385,
8386,
8387,
8388,
8389,
8390,
8391,
8392,
8393,
8394,
8395,
8396,
8397,
8398,
8399,
8400,
8401,
8402,
8403,
8404,
8405,
8406,
8407,
8408,
8409,
8410,
8411,
8412,
8413,
8414,
8415,
8416,
8417,
8418,
8419,
8420,
8421,
8422,
8423,
8424,
8425,
8426,
8427,
8428,
8429,
8430,
8431,
8432,
8433,
8434,
8435,
8436,
8437,
8438,
8439,
8440,
8441,
8442,
8443,
8444,
8445,
8446,
8447,
8448,
8449,
8450,
8451,
8452,
8453,
8454,
8455,
8456,
8457,
8458,
8459,
8460,
8461,
8462,
8463,
8464,
8465,
8466,
8467,
8468,
8469,
8470,
8471,
8472,
8473,
8474,
8475,
8476,
8477,
8478,
8479,
8480,
8481,
8482,
8483,
8484,
8485,
8486,
8487,
8488,
8489,
8490,
8491,
8492,
8493,
8494,
8495,
8496,
8497,
8498,
8499,
8500,
8501,
8502,
8503,
8504,
8505,
8506,
8507,
8508,
8509,
8510,
8511,
8512,
8513,
8514,
8515,
8516,
8517,
8518,
8519,
8520,
8521,
8522,
8523,
8524,
8525,
8526,
8527,
8528,
8529,
8530,
8531,
8532,
8533,
8534,
8535,
8536,
8537,
8538,
8539,
8540,
8541,
8542,
8543,
8544,
8545,
8546,
8547,
8548,
8549,
8550,
8551,
8552,
8553,
8554,
8555,
8556,
8557,
8558,
8559,
8560,
8561,
8562,
8563,
8564,
8565,
8566,
8567,
8568,
8569,
8570,
8571,
8572,
8573,
8574,
8575,
8576,
8577,
8578,
8579,
8580,
8581,
8582,
8583,
8584,
8585,
8586,
8587,
8588,
8589,
8590,
8591,
8592,
8593,
8594,
8595,
8596,
8597,
8598,
8599,
8600,
8601,
8602,
8603,
8604,
8605,
8606,
8607,
8608,
8609,
8610,
8611,
...],
2020: [10660,
10661,
10662,
10663,
10664,
10665,
10666,
10667,
10668,
10669,
10670,
10671,
10672,
10673,
10674,
10675,
10676,
10677,
10678,
10679,
10680,
10681,
10682,
10683,
10684,
10685,
10686,
10687,
10688,
10689,
10690,
10691,
10692,
10693,
10694,
10695,
10696,
10697,
10698,
10699,
10700,
10701,
10702,
10703,
10704,
10705,
10706,
10707,
10708,
10709,
10710,
10711,
10712,
10713,
10714,
10715,
10716,
10717,
10718,
10719,
10720,
10721,
10722,
10723,
10724,
10725,
10726,
10727,
10728,
10729,
10730,
10731,
10732,
10733,
10734,
10735,
10736,
10737,
10738,
10739,
10740,
10741,
10742,
10743,
10744,
10745,
10746,
10747,
10748,
10749,
10750,
10751,
10752,
10753,
10754,
10755,
10756,
10757,
10758,
10759,
10760,
10761,
10762,
10763,
10764,
10765,
10766,
10767,
10768,
10769,
10770,
10771,
10772,
10773,
10774,
10775,
10776,
10777,
10778,
10779,
10780,
10781,
10782,
10783,
10784,
10785,
10786,
10787,
10788,
10789,
10790,
10791,
10792,
10793,
10794,
10795,
10796,
10797,
10798,
10799,
10800,
10801,
10802,
10803,
10804,
10805,
10806,
10807,
10808,
10809,
10810,
10811,
10812,
10813,
10814,
10815,
10816,
10817,
10818,
10819,
10820,
10821,
10822,
10823,
10824,
10825,
10826,
10827,
10828,
10829,
10830,
10831,
10832,
10833,
10834,
10835,
10836,
10837,
10838,
10839,
10840,
10841,
10842,
10843,
10844,
10845,
10846,
10847,
10848,
10849,
10850,
10851,
10852,
10853,
10854,
10855,
10856,
10857,
10858,
10859,
10860,
10861,
10862,
10863,
10864,
10865,
10866,
10867,
10868,
10869,
10870,
10871,
10872,
10873,
10874,
10875,
10876,
10877,
10878,
10879,
10880,
10881,
10882,
10883,
10884,
10885,
10886,
10887,
10888,
10889,
10890,
10891,
10892,
10893,
10894,
10895,
10896,
10897,
10898,
10899,
10900,
10901,
10902,
10903,
10904,
10905,
10906,
10907,
10908,
10909,
10910,
10911,
10912,
10913,
10914,
10915,
10916,
10917,
10918,
10919,
10920,
10921,
10922,
10923,
10924,
10925,
10926,
10927,
10928,
10929,
10930,
10931,
10932,
10933,
10934,
10935,
10936,
10937,
10938,
10939,
10940,
10941,
10942,
10943,
10944,
10945,
10946,
10947,
10948,
10949,
10950,
10951,
10952,
10953,
10954,
10955,
10956,
10957,
10958,
10959,
10960,
10961,
10962,
10963,
10964,
10965,
10966,
10967,
10968,
10969,
10970,
10971,
10972,
10973,
10974,
10975,
10976,
10977,
10978,
10979,
10980,
10981,
10982,
10983,
10984,
10985,
10986,
10987,
10988,
10989,
10990,
10991,
10992,
10993,
10994,
10995,
10996,
10997,
10998,
10999,
11000,
11001,
11002,
11003,
11004,
11005,
11006,
11007,
11008,
11009,
11010,
11011,
11012,
11013,
11014,
11015,
11016,
11017,
11018,
11019,
11020,
11021,
11022,
11023,
11024,
11025,
11026,
11027,
11028,
11029,
11030,
11031,
11032,
11033,
11034,
11035,
11036,
11037,
11038,
11039,
11040,
11041,
11042,
11043,
11044,
11045,
11046,
11047,
11048,
11049,
11050,
11051,
11052,
11053,
11054,
11055,
11056,
11057,
11058,
11059,
11060,
11061,
11062,
11063,
11064,
11065,
11066,
11067,
11068,
11069,
11070,
11071,
11072,
11073,
11074,
11075,
11076,
11077,
11078,
11079,
11080,
11081,
11082,
11083,
11084,
11085,
11086,
11087,
11088,
11089,
11090,
11091,
11092,
11093,
11094,
11095,
11096,
11097,
11098,
11099,
11100,
11101,
11102,
11103,
11104,
11105,
11106,
11107,
11108,
11109,
11110,
11111,
11112,
11113,
11114,
11115,
11116,
11117,
11118,
11119,
11120,
11121,
11122,
11123,
11124,
11125,
11126,
11127,
11128,
11129,
11130,
11131,
11132,
11133,
11134,
11135,
11136,
11137,
11138,
11139,
11140,
11141,
11142,
11143,
11144,
11145,
11146,
11147,
11148,
11149,
11150,
11151,
11152,
11153,
11154,
11155,
11156,
11157,
11158,
11159,
11160,
11161,
11162,
11163,
11164,
11165,
11166,
11167,
11168,
11169,
11170,
11171,
11172,
11173,
11174,
11175,
11176,
11177,
11178,
11179,
11180,
11181,
11182,
11183,
11184,
11185,
11186,
11187,
11188,
11189,
11190,
11191,
11192,
11193,
11194,
11195,
11196,
11197,
11198,
11199,
11200,
11201,
11202,
11203,
11204,
11205,
11206,
11207,
11208,
11209,
11210,
11211,
11212,
11213,
11214,
11215,
11216,
11217,
11218,
11219,
11220,
11221,
11222,
11223,
11224,
11225,
11226,
11227,
11228,
11229,
11230,
11231,
11232,
11233,
11234,
11235,
11236,
11237,
11238,
11239,
11240,
11241,
11242,
11243,
11244,
11245,
11246,
11247,
11248,
11249,
11250,
11251,
11252,
11253,
11254,
11255,
11256,
11257,
11258,
11259,
11260,
11261,
11262,
11263,
11264,
11265,
11266,
11267,
11268,
11269,
11270,
11271,
11272,
11273,
11274,
11275,
11276,
11277,
11278,
11279,
11280,
11281,
11282,
11283,
11284,
11285,
11286,
11287,
11288,
11289,
11290,
11291,
11292,
11293,
11294,
11295,
11296,
11297,
11298,
11299,
11300,
11301,
11302,
11303,
11304,
11305,
11306,
11307,
11308,
11309,
11310,
11311,
11312,
11313,
11314,
11315,
11316,
11317,
11318,
11319,
11320,
11321,
11322,
11323,
11324,
11325,
11326,
11327,
11328,
11329,
11330,
11331,
11332,
11333,
11334,
11335,
11336,
11337,
11338,
11339,
11340,
11341,
11342,
11343,
11344,
11345,
11346,
11347,
11348,
11349,
11350,
11351,
11352,
11353,
11354,
11355,
11356,
11357,
11358,
11359,
11360,
11361,
11362,
11363,
11364,
11365,
11366,
11367,
11368,
11369,
11370,
11371,
11372,
11373,
11374,
11375,
11376,
11377,
11378,
11379,
11380,
11381,
11382,
11383,
11384,
11385,
11386,
11387,
11388,
11389,
11390,
11391,
11392,
11393,
11394,
11395,
11396,
11397,
11398,
11399,
11400,
11401,
11402,
11403,
11404,
11405,
11406,
11407,
11408,
11409,
11410,
11411,
11412,
11413,
11414,
11415,
11416,
11417,
11418,
11419,
11420,
11421,
11422,
11423,
11424,
11425,
11426,
11427,
11428,
11429,
11430,
11431,
11432,
11433,
11434,
11435,
11436,
11437,
11438,
11439,
11440,
11441,
11442,
11443,
11444,
11445,
11446,
11447,
11448,
11449,
11450,
11451,
11452,
11453,
11454,
11455,
11456,
11457,
11458,
11459,
11460,
11461,
11462,
11463,
11464,
11465,
11466,
11467,
11468,
11469,
11470,
11471,
11472,
11473,
11474,
11475,
11476,
11477,
11478,
11479,
11480,
11481,
11482,
11483,
11484,
11485,
11486,
11487,
11488,
11489,
11490,
11491,
11492,
11493,
11494,
11495,
11496,
11497,
11498,
11499,
11500,
11501,
11502,
11503,
11504,
11505,
11506,
11507,
11508,
11509,
11510,
11511,
11512,
11513,
11514,
11515,
11516,
11517,
11518,
11519,
11520,
11521,
11522,
11523,
11524,
11525,
11526,
11527,
11528,
11529,
11530,
11531,
11532,
11533,
11534,
11535,
11536,
11537,
11538,
11539,
11540,
11541,
11542,
11543,
11544,
11545,
11546,
11547,
11548,
11549,
11550,
11551,
11552,
11553,
11554,
11555,
11556,
11557,
11558,
11559,
11560,
11561,
11562,
11563,
11564,
11565,
11566,
11567,
11568,
11569,
11570,
11571,
11572,
11573,
11574,
11575,
11576,
11577,
11578,
11579,
11580,
11581,
11582,
11583,
11584,
11585,
11586,
11587,
11588,
11589,
11590,
11591,
11592,
11593,
11594,
11595,
11596,
11597,
11598,
11599,
11600,
11601,
11602,
11603,
11604,
11605,
11606,
11607,
11608,
11609,
11610,
11611,
11612,
11613,
11614,
11615,
11616,
11617,
11618,
11619,
11620,
11621,
11622,
11623,
11624,
11625,
11626,
11627,
11628,
11629,
11630,
11631,
11632,
11633,
11634,
11635,
11636,
11637,
11638,
11639,
11640,
11641,
11642,
11643,
11644,
11645,
11646,
11647,
11648,
11649,
11650,
11651,
11652,
11653,
11654,
11655,
11656,
11657,
11658,
11659,
...],
2021: [14065,
14066,
14067,
14068,
14069,
14070,
14071,
14072,
14073,
14074,
14075,
14076,
14077,
14078,
14079,
14080,
14081,
14082,
14083,
14084,
14085,
14086,
14087,
14088,
14089,
14090,
14091,
14092,
14093,
14094,
14095,
14096,
14097,
14098,
14099,
14100,
14101,
14102,
14103,
14104,
14105,
14106,
14107,
14108,
14109,
14110,
14111,
14112,
14113,
14114,
14115,
14116,
14117,
14118,
14119,
14120,
14121,
14122,
14123,
14124,
14125,
14126,
14127,
14128,
14129,
14130,
14131,
14132,
14133,
14134,
14135,
14136,
14137,
14138,
14139,
14140,
14141,
14142,
14143,
14144,
14145,
14146,
14147,
14148,
14149,
14150,
14151,
14152,
14153,
14154,
14155,
14156,
14157,
14158,
14159,
14160,
14161,
14162,
14163,
14164,
14165,
14166,
14167,
14168,
14169,
14170,
14171,
14172,
14173,
14174,
14175,
14176,
14177,
14178,
14179,
14180,
14181,
14182,
14183,
14184,
14185,
14186,
14187,
14188,
14189,
14190,
14191,
14192,
14193,
14194,
14195,
14196,
14197,
14198,
14199,
14200,
14201,
14202,
14203,
14204,
14205,
14206,
14207,
14208,
14209,
14210,
14211,
14212,
14213,
14214,
14215,
14216,
14217,
14218,
14219,
14220,
14221,
14222,
14223,
14224,
14225,
14226,
14227,
14228,
14229,
14230,
14231,
14232,
14233,
14234,
14235,
14236,
14237,
14238,
14239,
14240,
14241,
14242,
14243,
14244,
14245,
14246,
14247,
14248,
14249,
14250,
14251,
14252,
14253,
14254,
14255,
14256,
14257,
14258,
14259,
14260,
14261,
14262,
14263,
14264,
14265,
14266,
14267,
14268,
14269,
14270,
14271,
14272,
14273,
14274,
14275,
14276,
14277,
14278,
14279,
14280,
14281,
14282,
14283,
14284,
14285,
14286,
14287,
14288,
14289,
14290,
14291,
14292,
14293,
14294,
14295,
14296,
14297,
14298,
14299,
14300,
14301,
14302,
14303,
14304,
14305,
14306,
14307,
14308,
14309,
14310,
14311,
14312,
14313,
14314,
14315,
14316,
14317,
14318,
14319,
14320,
14321,
14322,
14323,
14324,
14325,
14326,
14327,
14328,
14329,
14330,
14331,
14332,
14333,
14334,
14335,
14336,
14337,
14338,
14339,
14340,
14341,
14342,
14343,
14344,
14345,
14346,
14347,
14348,
14349,
14350,
14351,
14352,
14353,
14354,
14355,
14356,
14357,
14358,
14359,
14360,
14361,
14362,
14363,
14364,
14365,
14366,
14367,
14368,
14369,
14370,
14371,
14372,
14373,
14374,
14375,
14376,
14377,
14378,
14379,
14380,
14381,
14382,
14383,
14384,
14385,
14386,
14387,
14388,
14389,
14390,
14391,
14392,
14393,
14394,
14395,
14396,
14397,
14398,
14399,
14400,
14401,
14402,
14403,
14404,
14405,
14406,
14407,
14408,
14409,
14410,
14411,
14412,
14413,
14414,
14415,
14416,
14417,
14418,
14419,
14420,
14421,
14422,
14423,
14424,
14425,
14426,
14427,
14428,
14429,
14430,
14431,
14432,
14433,
14434,
14435,
14436,
14437,
14438,
14439,
14440,
14441,
14442,
14443,
14444,
14445,
14446,
14447,
14448,
14449,
14450,
14451,
14452,
14453,
14454,
14455,
14456,
14457,
14458,
14459,
14460,
14461,
14462,
14463,
14464,
14465,
14466,
14467,
14468,
14469,
14470,
14471,
14472,
14473,
14474,
14475,
14476,
14477,
14478,
14479,
14480,
14481,
14482,
14483,
14484,
14485,
14486,
14487,
14488,
14489,
14490,
14491,
14492,
14493,
14494,
14495,
14496,
14497,
14498,
14499,
14500,
14501,
14502,
14503,
14504,
14505,
14506,
14507,
14508,
14509,
14510,
14511,
14512,
14513,
14514,
14515,
14516,
14517,
14518,
14519,
14520,
14521,
14522,
14523,
14524,
14525,
14526,
14527,
14528,
14529,
14530,
14531,
14532,
14533,
14534,
14535,
14536,
14537,
14538,
14539,
14540,
14541,
14542,
14543,
14544,
14545,
14546,
14547,
14548,
14549,
14550,
14551,
14552,
14553,
14554,
14555,
14556,
14557,
14558,
14559,
14560,
14561,
14562,
14563,
14564,
14565,
14566,
14567,
14568,
14569,
14570,
14571,
14572,
14573,
14574,
14575,
14576,
14577,
14578,
14579,
14580,
14581,
14582,
14583,
14584,
14585,
14586,
14587,
14588,
14589,
14590,
14591,
14592,
14593,
14594,
14595,
14596,
14597,
14598,
14599,
14600,
14601,
14602,
14603,
14604,
14605,
14606,
14607,
14608,
14609,
14610,
14611,
14612,
14613,
14614,
14615,
14616,
14617,
14618,
14619,
14620,
14621,
14622,
14623,
14624,
14625,
14626,
14627,
14628,
14629,
14630,
14631,
14632,
14633,
14634,
14635,
14636,
14637,
14638,
14639,
14640,
14641,
14642,
14643,
14644,
14645,
14646,
14647,
14648,
14649,
14650,
14651,
14652,
14653,
14654,
14655,
14656,
14657,
14658,
14659,
14660,
14661,
14662,
14663,
14664,
14665,
14666,
14667,
14668,
14669,
14670,
14671,
14672,
14673,
14674,
14675,
14676,
14677,
14678,
14679,
14680,
14681,
14682,
14683,
14684,
14685,
14686,
14687,
14688,
14689,
14690,
14691,
14692,
14693,
14694,
14695,
14696,
14697,
14698,
14699,
14700,
14701,
14702,
14703,
14704,
14705,
14706,
14707,
14708,
14709,
14710,
14711,
14712,
14713,
14714,
14715,
14716,
14717,
14718,
14719,
14720,
14721,
14722,
14723,
14724,
14725,
14726,
14727,
14728,
14729,
14730,
14731,
14732,
14733,
14734,
14735,
14736,
14737,
14738,
14739,
14740,
14741,
14742,
14743,
14744,
14745,
14746,
14747,
14748,
14749,
14750,
14751,
14752,
14753,
14754,
14755,
14756,
14757,
14758,
14759,
14760,
14761,
14762,
14763,
14764,
14765,
14766,
14767,
14768,
14769,
14770,
14771,
14772,
14773,
14774,
14775,
14776,
14777,
14778,
14779,
14780,
14781,
14782,
14783,
14784,
14785,
14786,
14787,
14788,
14789,
14790,
14791,
14792,
14793,
14794,
14795,
14796,
14797,
14798,
14799,
14800,
14801,
14802,
14803,
14804,
14805,
14806,
14807,
14808,
14809,
14810,
14811,
14812,
14813,
14814,
14815,
14816,
14817,
14818,
14819,
14820,
14821,
14822,
14823,
14824,
14825,
14826,
14827,
14828,
14829,
14830,
14831,
14832,
14833,
14834,
14835,
14836,
14837,
14838,
14839,
14840,
14841,
14842,
14843,
14844,
14845,
14846,
14847,
14848,
14849,
14850,
14851,
14852,
14853,
14854,
14855,
14856,
14857,
14858,
14859,
14860,
14861,
14862,
14863,
14864,
14865,
14866,
14867,
14868,
14869,
14870,
14871,
14872,
14873,
14874,
14875,
14876,
14877,
14878,
14879,
14880,
14881,
14882,
14883,
14884,
14885,
14886,
14887,
14888,
14889,
14890,
14891,
14892,
14893,
14894,
14895,
14896,
14897,
14898,
14899,
14900,
14901,
14902,
14903,
14904,
14905,
14906,
14907,
14908,
14909,
14910,
14911,
14912,
14913,
14914,
14915,
14916,
14917,
14918,
14919,
14920,
14921,
14922,
14923,
14924,
14925,
14926,
14927,
14928,
14929,
14930,
14931,
14932,
14933,
14934,
14935,
14936,
14937,
14938,
14939,
14940,
14941,
14942,
14943,
14944,
14945,
14946,
14947,
14948,
14949,
14950,
14951,
14952,
14953,
14954,
14955,
14956,
14957,
14958,
14959,
14960,
14961,
14962,
14963,
14964,
14965,
14966,
14967,
14968,
14969,
14970,
14971,
14972,
14973,
14974,
14975,
14976,
14977,
14978,
14979,
14980,
14981,
14982,
14983,
14984,
14985,
14986,
14987,
14988,
14989,
14990,
14991,
14992,
14993,
14994,
14995,
14996,
14997,
14998,
14999,
15000,
15001,
15002,
15003,
15004,
15005,
15006,
15007,
15008,
15009,
15010,
15011,
15012,
15013,
15014,
15015,
15016,
15017,
15018,
15019,
15020,
15021,
15022,
15023,
15024,
15025,
15026,
15027,
15028,
15029,
15030,
15031,
15032,
15033,
15034,
15035,
15036,
15037,
15038,
15039,
15040,
15041,
15042,
15043,
15044,
15045,
15046,
15047,
15048,
15049,
15050,
15051,
15052,
15053,
15054,
15055,
15056,
15057,
15058,
15059,
15060,
15061,
15062,
15063,
15064,
...],
2022: [19614,
19615,
19616,
19617,
19618,
19619,
19620,
19621,
19622,
19623,
19624,
19625,
19626,
19627,
19628,
19629,
19630,
19631,
19632,
19633,
19634,
19635,
19636,
19637,
19638,
19639,
19640,
19641,
19642,
19643,
19644,
19645,
19646,
19647,
19648,
19649,
19650,
19651,
19652,
19653,
19654,
19655,
19656,
19657,
19658,
19659,
19660,
19661,
19662,
19663,
19664,
19665,
19666,
19667,
19668,
19669,
19670,
19671,
19672,
19673,
19674,
19675,
19676,
19677,
19678,
19679,
19680,
19681,
19682,
19683,
19684,
19685,
19686,
19687,
19688,
19689,
19690,
19691,
19692,
19693,
19694,
19695,
19696,
19697,
19698,
19699,
19700,
19701,
19702,
19703,
19704,
19705,
19706,
19707,
19708,
19709,
19710,
19711,
19712,
19713,
19714,
19715,
19716,
19717,
19718,
19719,
19720,
19721,
19722,
19723,
19724,
19725,
19726,
19727,
19728,
19729,
19730,
19731,
19732,
19733,
19734,
19735,
19736,
19737,
19738,
19739,
19740,
19741,
19742,
19743,
19744,
19745,
19746,
19747,
19748,
19749,
19750,
19751,
19752,
19753,
19754,
19755,
19756,
19757,
19758,
19759,
19760,
19761,
19762,
19763,
19764,
19765,
19766,
19767,
19768,
19769,
19770,
19771,
19772,
19773,
19774,
19775,
19776,
19777,
19778,
19779,
19780,
19781,
19782,
19783,
19784,
19785,
19786,
19787,
19788,
19789,
19790,
19791,
19792,
19793,
19794,
19795,
19796,
19797,
19798,
19799,
19800,
19801,
19802,
19803,
19804,
19805,
19806,
19807,
19808,
19809,
19810,
19811,
19812,
19813,
19814,
19815,
19816,
19817,
19818,
19819,
19820,
19821,
19822,
19823,
19824,
19825,
19826,
19827,
19828,
19829,
19830,
19831,
19832,
19833,
19834,
19835,
19836,
19837,
19838,
19839,
19840,
19841,
19842,
19843,
19844,
19845,
19846,
19847,
19848,
19849,
19850,
19851,
19852,
19853,
19854,
19855,
19856,
19857,
19858,
19859,
19860,
19861,
19862,
19863,
19864,
19865,
19866,
19867,
19868,
19869,
19870,
19871,
19872,
19873,
19874,
19875,
19876,
19877,
19878,
19879,
19880,
19881,
19882,
19883,
19884,
19885,
19886,
19887,
19888,
19889,
19890,
19891,
19892,
19893,
19894,
19895,
19896,
19897,
19898,
19899,
19900,
19901,
19902,
19903,
19904,
19905,
19906,
19907,
19908,
19909,
19910,
19911,
19912,
19913,
19914,
19915,
19916,
19917,
19918,
19919,
19920,
19921,
19922,
19923,
19924,
19925,
19926,
19927,
19928,
19929,
19930,
19931,
19932,
19933,
19934,
19935,
19936,
19937,
19938,
19939,
19940,
19941,
19942,
19943,
19944,
19945,
19946,
19947,
19948,
19949,
19950,
19951,
19952,
19953,
19954,
19955,
19956,
19957,
19958,
19959,
19960,
19961,
19962,
19963,
19964,
19965,
19966,
19967,
19968,
19969,
19970,
19971,
19972,
19973,
19974,
19975,
19976,
19977,
19978,
19979,
19980,
19981,
19982,
19983,
19984,
19985,
19986,
19987,
19988,
19989,
19990,
19991,
19992,
19993,
19994,
19995,
19996,
19997,
19998,
19999,
20000,
20001,
20002,
20003,
20004,
20005,
20006,
20007,
20008,
20009,
20010,
20011,
20012,
20013,
20014,
20015,
20016,
20017,
20018,
20019,
20020,
20021,
20022,
20023,
20024,
20025,
20026,
20027,
20028,
20029,
20030,
20031,
20032,
20033,
20034,
20035,
20036,
20037,
20038,
20039,
20040,
20041,
20042,
20043,
20044,
20045,
20046,
20047,
20048,
20049,
20050,
20051,
20052,
20053,
20054,
20055,
20056,
20057,
20058,
20059,
20060,
20061,
20062,
20063,
20064,
20065,
20066,
20067,
20068,
20069,
20070,
20071,
20072,
20073,
20074,
20075,
20076,
20077,
20078,
20079,
20080,
20081,
20082,
20083,
20084,
20085,
20086,
20087,
20088,
20089,
20090,
20091,
20092,
20093,
20094,
20095,
20096,
20097,
20098,
20099,
20100,
20101,
20102,
20103,
20104,
20105,
20106,
20107,
20108,
20109,
20110,
20111,
20112,
20113,
20114,
20115,
20116,
20117,
20118,
20119,
20120,
20121,
20122,
20123,
20124,
20125,
20126,
20127,
20128,
20129,
20130,
20131,
20132,
20133,
20134,
20135,
20136,
20137,
20138,
20139,
20140,
20141,
20142,
20143,
20144,
20145,
20146,
20147,
20148,
20149,
20150,
20151,
20152,
20153,
20154,
20155,
20156,
20157,
20158,
20159,
20160,
20161,
20162,
20163,
20164,
20165,
20166,
20167,
20168,
20169,
20170,
20171,
20172,
20173,
20174,
20175,
20176,
20177,
20178,
20179,
20180,
20181,
20182,
20183,
20184,
20185,
20186,
20187,
20188,
20189,
20190,
20191,
20192,
20193,
20194,
20195,
20196,
20197,
20198,
20199,
20200,
20201,
20202,
20203,
20204,
20205,
20206,
20207,
20208,
20209,
20210,
20211,
20212,
20213,
20214,
20215,
20216,
20217,
20218,
20219,
20220,
20221,
20222,
20223,
20224,
20225,
20226,
20227,
20228,
20229,
20230,
20231,
20232,
20233,
20234,
20235,
20236,
20237,
20238,
20239,
20240,
20241,
20242,
20243,
20244,
20245,
20246,
20247,
20248,
20249,
20250,
20251,
20252,
20253,
20254,
20255,
20256,
20257,
20258,
20259,
20260,
20261,
20262,
20263,
20264,
20265,
20266,
20267,
20268,
20269,
20270,
20271,
20272,
20273,
20274,
20275,
20276,
20277,
20278,
20279,
20280,
20281,
20282,
20283,
20284,
20285,
20286,
20287,
20288,
20289,
20290,
20291,
20292,
20293,
20294,
20295,
20296,
20297,
20298,
20299,
20300,
20301,
20302,
20303,
20304,
20305,
20306,
20307,
20308,
20309,
20310,
20311,
20312,
20313,
20314,
20315,
20316,
20317,
20318,
20319,
20320,
20321,
20322,
20323,
20324,
20325,
20326,
20327,
20328,
20329,
20330,
20331,
20332,
20333,
20334,
20335,
20336,
20337,
20338,
20339,
20340,
20341,
20342,
20343,
20344,
20345,
20346,
20347,
20348,
20349,
20350,
20351,
20352,
20353,
20354,
20355,
20356,
20357,
20358,
20359,
20360,
20361,
20362,
20363,
20364,
20365,
20366,
20367,
20368,
20369,
20370,
20371,
20372,
20373,
20374,
20375,
20376,
20377,
20378,
20379,
20380,
20381,
20382,
20383,
20384,
20385,
20386,
20387,
20388,
20389,
20390,
20391,
20392,
20393,
20394,
20395,
20396,
20397,
20398,
20399,
20400,
20401,
20402,
20403,
20404,
20405,
20406,
20407,
20408,
20409,
20410,
20411,
20412,
20413,
20414,
20415,
20416,
20417,
20418,
20419,
20420,
20421,
20422,
20423,
20424,
20425,
20426,
20427,
20428,
20429,
20430,
20431,
20432,
20433,
20434,
20435,
20436,
20437,
20438,
20439,
20440,
20441,
20442,
20443,
20444,
20445,
20446,
20447,
20448,
20449,
20450,
20451,
20452,
20453,
20454,
20455,
20456,
20457,
20458,
20459,
20460,
20461,
20462,
20463,
20464,
20465,
20466,
20467,
20468,
20469,
20470,
20471,
20472,
20473,
20474,
20475,
20476,
20477,
20478,
20479,
20480,
20481,
20482,
20483,
20484,
20485,
20486,
20487,
20488,
20489,
20490,
20491,
20492,
20493,
20494,
20495,
20496,
20497,
20498,
20499,
20500,
20501,
20502,
20503,
20504,
20505,
20506,
20507,
20508,
20509,
20510,
20511,
20512,
20513,
20514,
20515,
20516,
20517,
20518,
20519,
20520,
20521,
20522,
20523,
20524,
20525,
20526,
20527,
20528,
20529,
20530,
20531,
20532,
20533,
20534,
20535,
20536,
20537,
20538,
20539,
20540,
20541,
20542,
20543,
20544,
20545,
20546,
20547,
20548]}
coverage = flox.xarray.xarray_reduce(
sample_glacier_raster.cov,
sample_glacier_raster.satellite_img1.compute(),
sample_glacier_raster.mid_date,
func="mean",
fill_value=0,
)
/Users/emarshall/miniconda3/envs/itslivetools_env/lib/python3.10/site-packages/flox/aggregate_flox.py:105: RuntimeWarning: invalid value encountered in true_divide
out /= nanlen(group_idx, array, size=size, axis=axis, fill_value=0)
yr_season_mean_v = flox.xarray.xarray_reduce(
sample_glacier_raster.v,
sample_glacier_raster.mid_date.dt.year,
sample_glacier_raster.mid_date.dt.season,
func = 'mean',
)
yr_season_mean.compute()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Input In [51], in <cell line: 1>()
----> 1 yr_season_mean.compute()
NameError: name 'yr_season_mean' is not defined
yr_season_mean
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Input In [52], in <cell line: 1>()
----> 1 yr_season_mean
NameError: name 'yr_season_mean' is not defined
fg_yr = yr_season_mean.plot(
col='season',
row = 'year',)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Input In [53], in <cell line: 1>()
----> 1 fg_yr = yr_season_mean.plot(
2 col='season',
3 row = 'year',)
NameError: name 'yr_season_mean' is not defined
Seasonal mean velocities with groupby¶
#first define the function we'll apply to each group
def middate_mean(a):
return a.mean(dim='mid_date')
seasons_gb = sample_glacier_raster.groupby(sample_glacier_raster.mid_date.dt.season).map(middate_mean)
#add attrs to gb object
seasons_gb.attrs = sample_glacier_raster.attrs #why didn't that work?
seasons_gb
<xarray.Dataset>
Dimensions: (y: 54, x: 100, season: 4)
Coordinates:
mapping int64 0
* y (y) float64 3.188e+06 3.188e+06 ... 3.182e+06
* x (x) float64 2.36e+05 2.361e+05 ... 2.477e+05 2.479e+05
* season (season) object 'DJF' 'JJA' 'MAM' 'SON'
Data variables: (12/43)
chip_size_height (season, y, x) float32 dask.array<chunksize=(1, 20, 21), meta=np.ndarray>
chip_size_width (season, y, x) float32 dask.array<chunksize=(1, 20, 21), meta=np.ndarray>
date_dt (season) timedelta64[ns] dask.array<chunksize=(1,), meta=np.ndarray>
interp_mask (season, y, x) float32 dask.array<chunksize=(1, 20, 21), meta=np.ndarray>
roi_valid_percentage (season) float64 dask.array<chunksize=(1,), meta=np.ndarray>
stable_count_mask (season) float64 dask.array<chunksize=(1,), meta=np.ndarray>
... ...
vy_error_modeled (season) float64 dask.array<chunksize=(1,), meta=np.ndarray>
vy_error_slow (season) float64 dask.array<chunksize=(1,), meta=np.ndarray>
vy_stable_shift (season) float64 dask.array<chunksize=(1,), meta=np.ndarray>
vy_stable_shift_mask (season) float64 dask.array<chunksize=(1,), meta=np.ndarray>
vy_stable_shift_slow (season) float64 dask.array<chunksize=(1,), meta=np.ndarray>
cov (season) float64 0.376 0.3944 0.3841 0.3683
Attributes: (12/18)
GDAL_AREA_OR_POINT: Area
author: ITS_LIVE, a NASA MEaSUREs project (its-live.j...
autoRIFT_parameter_file: http://its-live-data.s3.amazonaws.com/autorif...
datacube_software_version: 1.0
date_created: 09-Jun-2022 04:14:40
date_updated: 09-Jun-2022 04:14:40
... ...
s3: s3://its-live-data/datacubes/v02/N20E080/ITS_...
skipped_granules: s3://its-live-data/datacubes/v02/N20E080/ITS_...
time_standard_img1: UTC
time_standard_img2: UTC
title: ITS_LIVE datacube of image_pair velocities
url: https://its-live-data.s3.amazonaws.com/datacu...fg = seasons_gb.v.plot(
col='season',
vmax = 150
);